XPath normalize-space() 不能作为步进函数工作?
XPath normalize-space() not working as a step function?
我刚刚设计了一个 XPath 表达式来查找所有空元素并 return 紧跟在结尾之后的文本。
我已经在 OXYGEN 中测试了这个 XPath,return这正是我要找的。由于我还不知道的原因,我无法在 Visual Studio (C#) 中这样做。
XPath 表达式:
//xref[not(@href)]/normalize-space(substring(following-sibling::text()[1], 1, 20))
这是 XPath 搜索的 DITA (XML) 文件的示例:
<?xml version="1.0" encoding="UTF-8"?>
<topic id="topic_50038EEEBC214A0EBF0660DCFFCF69C6">
<title> Postulated Piping Failures in Fluid Systems Outside of
Containment</title>
<prolog>
<author/>
</prolog>
<body>
<p>
<b>Definitions</b>
</p>
<p>
<u>Leakage</u>
</p>
<p>
<xref
href="t1.3.2.2_System Quality Group Classifications.dita#topic_AE87340A0F424D07B0E301E243CCB7B2"
format="dita" scope="local"><?xm-replace_text System Quality Group Classifications?></xref>
TEXT
</p>
<p>
<u>
</u>TEXT
<xref></xref>5.2
</p>
</body>
</topic>
在 OXYGEN 中,使用 XPath 栏,结果是“5.2”,这正是我想要检索的结果。
这是检索节点的 C#:
String xPathFindXREF = "//xref[not(@href)]/normalize-space(substring(following-sibling::text()[1], 1, 20))";
XmlNodeList xmlNodeList = currFile.SelectNodes(xPathFindXREF);
是否可以在 C# 中使用像 normalize-space()
这样的 XPath 函数?
您的 XPath 表达式需要 XPath 2.0,Oxygen 支持,但本机 C# 库不支持。
顺便说一句,这里讨论的不是 normalize-space()
支持,因为这在两个版本的 XPath 中都受支持;它是将 normalize-space()
用作阶跃函数,而不是在需要 XPath 2.0 的谓词中使用。
您的选择是使用支持 XPath 2.0 的 C# XPath 库,或者通过 C# 遍历 XPath 选定节点并单独规范化每个节点的字符串值。
我刚刚设计了一个 XPath 表达式来查找所有空元素并 return 紧跟在结尾之后的文本。
我已经在 OXYGEN 中测试了这个 XPath,return这正是我要找的。由于我还不知道的原因,我无法在 Visual Studio (C#) 中这样做。
XPath 表达式:
//xref[not(@href)]/normalize-space(substring(following-sibling::text()[1], 1, 20))
这是 XPath 搜索的 DITA (XML) 文件的示例:
<?xml version="1.0" encoding="UTF-8"?>
<topic id="topic_50038EEEBC214A0EBF0660DCFFCF69C6">
<title> Postulated Piping Failures in Fluid Systems Outside of
Containment</title>
<prolog>
<author/>
</prolog>
<body>
<p>
<b>Definitions</b>
</p>
<p>
<u>Leakage</u>
</p>
<p>
<xref
href="t1.3.2.2_System Quality Group Classifications.dita#topic_AE87340A0F424D07B0E301E243CCB7B2"
format="dita" scope="local"><?xm-replace_text System Quality Group Classifications?></xref>
TEXT
</p>
<p>
<u>
</u>TEXT
<xref></xref>5.2
</p>
</body>
</topic>
在 OXYGEN 中,使用 XPath 栏,结果是“5.2”,这正是我想要检索的结果。
这是检索节点的 C#:
String xPathFindXREF = "//xref[not(@href)]/normalize-space(substring(following-sibling::text()[1], 1, 20))";
XmlNodeList xmlNodeList = currFile.SelectNodes(xPathFindXREF);
是否可以在 C# 中使用像 normalize-space()
这样的 XPath 函数?
您的 XPath 表达式需要 XPath 2.0,Oxygen 支持,但本机 C# 库不支持。
顺便说一句,这里讨论的不是 normalize-space()
支持,因为这在两个版本的 XPath 中都受支持;它是将 normalize-space()
用作阶跃函数,而不是在需要 XPath 2.0 的谓词中使用。
您的选择是使用支持 XPath 2.0 的 C# XPath 库,或者通过 C# 遍历 XPath 选定节点并单独规范化每个节点的字符串值。