这道面试题,你能搞定吗? 我想了N天...哎(200分)

  • 主题发起人 主题发起人 findbug
  • 开始时间 开始时间
F

findbug

Unregistered / Unconfirmed
GUEST, unregistred user!
试题:
1. 写一个函数F,读入以下一段xml(样例)到RichEdit,要求如下:
1)显示格式 ,其中"大","合格"==>变成蓝色下划线.Option中的子节点显示第一个节点.

工程大,测试合格
2)读入后,要保存为新xml,填充属性值caretpos和itemlen.
Caretpos为每个蓝色下划线部份开始所在richedit中光标位置.
ItemLen为蓝色下划线部份的文字长度.
2.任意编辑RichEdit中内容,能实时更新这份xml.可以称之为"双向翻译',
编辑后RichEdit中的内容及格式称为X,X能用xml表示,这段xml称为A
反之,用第1个题目写的函数F加载A,必须能显示出X
其中,第1个题目倒不是难.
第2个题目,我想到头大....真的很难哦...



<?xml version="1.0" encoding="gb2312" standalone="no"?>
<template xmlns="">
<text xmlns="">工程</text>
<option xmlns="" caretpos="5" itemlen="2">
<item xmlns="">大</item>
<item xmlns="">中</item>
<item xmlns="">小</item>
</option>
<text xmlns="">,测试</text>
<option xmlns="" caretpos="13" itemlen="6">
<item xmlns="">合格</item>
<item xmlns="">不合格</item>
<item xmlns="">劣</item>
</option>
.....
....
</template>

 
对于2,再补充一点
就是要接管richedit中的keydown和mousedown事件,
如 : 删除字符,如果删除蓝色一部份,则更新xml时就要删除其option所有节点,将剩下的部份文字并入前面的text.

工程大,测试合格
(大,合格 ==>蓝色下划线)
如果选择删除"试合",则变成
工程大,测格
("格"字,没有蓝色下划线. 对应于xml,它跟之前的text合并)
 
大富翁的高手到哪去了??等着救命呢
 
显示涵数
procedure ShowXML(var sXML :String ;RichEdit :TRichEdit);
var
i :integer;
sTemp ,sBody :String;
RootNode,ParentNode :IXMLNode;
begin
XMLDocument.LoadFromXML(sTemplate);
RootNode := XMLDocument.DocumentElement;

sTemp := '';
sBody := '';
for i := 0 to RootNode.ChildNodes.Count - 1do
begin
ParentNode := RootNode.ChildNodes.Nodes;
if (not ParentNode.HasChildNodes) then
continue;

sTemp := String(ParentNode.ChildNodes.Nodes[0].Text);
if (ParentNode.NodeName = String('option')) then
begin
ParentNode.SetAttribute('caretpos', Length(sBody));
ParentNode.SetAttribute('itemlen', Length(sTemp));
end;
sBody := sBody + sTemp;
end;

// 显示xml
with RichEditdo
begin
Lines.begin
Update;
try
Lines.Clear;
Lines.Text := sBody;
for i :=0 to RootNode.ChildNodes.Count - 1do
begin
ParentNode := RootNode.ChildNodes.Nodes;
if (ParentNode.NodeName = String('option')) then
begin
SelStart := pParentNode.GetAttribute('caretpos');
SelLength := pParentNode.GetAttribute('itemlen');
SelAttributes.Color := clBlue;
SelAttributes.Style := [fsUnderline];
end;
end;

SetFocus;
SelStart := 0;
SelLength := 0;
finally
Lines.EndUpdate;
end;
end;
// with
end;
 
高手到此一游
 
第2题主要是没有说明各种异常情况怎么处理,
如果我随便输入一段乱字符,在保存的时候,是把这些乱字符去掉呢,还是用别的方式存下来?
 
保存..
按Xml格式保存: 蓝色下划线 ==>对应于option
其他对应于====>text
 
对于 XML 还不是那么熟悉,但是很感兴趣,帮你顶一下先……
 
先占一个位置,以后在来拜读大作
 
后退
顶部