我有一个像这样的 XML 结构。
<Process>
<Name> Process1 </Name>
<SQLFile> aSQLFile.sql </SQLFile>
<SQLText> select * from Items <SQLText>
<Mode> 2 </Mode>
<Process>
beevik/etree
来处理这个。
在下面的示例代码中,此 XML 结构的列表称为
elems
。我调用此代码来遍历 XML 文档中的 elems
:
for elemA := range elems.FindElements("//Name") {
elemB:=elemA.FindElement(//SQLFile){
doSomething(elemB)
}
此代码有效 -
doSomething(elemB)
执行了它应该执行的操作,但根据 FindElement
上的 etree 注释,它应该会失败。 elemB
应该是 nil
:
FindElement 返回与 XPath-like 匹配的第一个元素 “路径”字符串。 如果没有找到子元素,函数返回nil 使用路径。
根据该评论,
elemB:=elemA.FindElement(//SQLFile)
应该返回nil
,因为<SQLFile>
是<Name>
的兄弟姐妹,而不是孩子。
<Name>
没有孩子。
为什么这段代码中
elemA.FindElement(//SQLFile)
没有返回 nil
?
etree 评论中似乎有一个拼写错误:
如果使用以下方法找不到子元素,则该函数返回 nil
//
路径。
是不正确的。 //
返回兄弟节点,而不是子节点,如 XPath 所示。
.//
返回一个孩子。