首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以从XPathNavigator检索原始XML吗?

可以从XPathNavigator检索原始XML吗?
EN

Stack Overflow用户
提问于 2009-09-17 03:53:47
回答 1查看 470关注 0票数 1

我有一个XML文档,想做语法高亮。

代码使用XPathDocumentXPathNavigatorXPathNodeIterator。调用选择()之后,如何在XML文档中获取原始文本?

代码语言:javascript
复制
var xpathDoc = new XPathDocument(new StringReader(this.richTextBox1.Text));
var nav = xpathDoc.CreateNavigator();
XmlNamespaceManager xmlns = new XmlNamespaceManager(nav.NameTable);
xmlns.AddNamespace("ns1", "urn:myxnlnamespace");
XPathNodeIterator selection = nav.Select(xpathExpression, xmlns);

foreach (XPathNavigator node in selection)
{
   // Here, node.OuterXml includes an explicit namespace.
   // If the original raw xml fragment for this node was
   //    <ElementName>Text</ElementName>
   // and if xmlns="urn:myxnlnamespace" is used on the root of the document....
   //
   // OuterXml will return
   //    <ElementName xmlns="urn:myxnlnamespace">Text</ElementName>
   //
   // InnerXml will return "Text" in this example. 
   // 
   // How can I get the original, raw XML bytestream for this node?
   // Like this:
   //    <ElementName>Text</ElementName>
   //
}

对我来说,获得所选节点的开始和结束的IXmlLineInfo也是可行的。现在,我可以移到所选节点的开头,并为此获取IXmlLineInfo。但是我只知道如何移动到下一个节点(MoveToNext());不知道如何移动到当前节点的末尾。此外,如果所讨论的节点是序列中的最后一个节点(不再是兄弟节点),则此方法不起作用。

如果有一些xpath表达式返回当前节点的完整原始文本,它也会工作。到目前为止我也找不到类似的东西。

编辑:我通过一次无耻的黑客攻击解决了这个问题。为了确定我需要突出显示的文本的长度,我手动解析原始xml文本,搜索尖括号和名称标记。它并不漂亮,但在没有更好的东西的情况下,它适用于简单的XML文件。

如果有人有答案的话,我仍然对一个真正的答案感兴趣。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-09-18 03:05:20

您可能会发现,XPath可视化器执行XML文档语法编译的方式很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1436634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档