1
2
如果您知道只有一个名称空间(即xhtml名称空间)并将其定义为默认名称空间,则可以通过使用不知道名称空间的xmltextreader进行处理来作弊,如下所示:
这对我很有用,输出“example”,所以路径“html/body/h1”会找到“h1”元素。 其他选项是,首先通过一些样式表运行输入以除去名称空间,然后使用除去的名称空间处理转换结果。 当然,您可以考虑不依赖microsoft xpath 1.0实现,而转向第三方xpath 2.0或xquery1.0实现,如 Saxon 或者像 XQSharp . 然后可以为xpath或xquery表达式定义默认的元素名称空间,并使用不带前缀的路径来选择xhtml名称空间中的元素。 |
2
2
不, XPath W3C spec is explicit about this :
在这种情况下,任何试图动态地“按摩”未知的预先xpath表达式以使其成功的尝试通常都会失败。
,这意味着应该能够对xpath表达式执行完整的解析,并隔离所有不是轴、运算符或函数名的元素名——我不会要求任何人这样做。甚至很难正确地找到每个定位步骤的开始(即
需要完全解析的(子)表达式的一个示例是:
如果xpath表达式会对它们施加一些限制,那么这样的方法可能会有一些有限的成功,但是我不建议这么做,因为没有人可以 证明 正则表达式在所有情况下都能正常工作。 |
3
1
这里有一个廉价而快速的方法完全消除了默认名称空间:更改xmlns属性的名称。 例如,如果XML已经包含在字符串变量中,则在实际创建xpathdocument之前执行以下操作:
(在我的计算机上的93KB文件上花费了0.00065秒。) 然后就可以自由地使用无前缀的xpath查询了。 |
4
0
我已经使用默认名称空间regex hack一段时间了,它看起来工作得很好。我在stackoverflow上找到了原件并添加了一些修改:
|
JobProcessTask · 如何读取此xpath表达式? 2 年前 |
MBF · PHP导入/解析XML文件内容保存到数据库 2 年前 |
TenkMan · SQL Server XML嵌套值查询表单990 2 年前 |
Mohan.Murali.Peddini · XSLT模板循环记录 2 年前 |