通过使用xpath过滤c#中的现有文档来创建新的XMLDocument
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了通过使用xpath过滤c#中的现有文档来创建新的XMLDocument,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1800字,纯文字阅读大概需要3分钟。
内容图文
![通过使用xpath过滤c#中的现有文档来创建新的XMLDocument](/upload/InfoBanner/zyjiaocheng/775/b83b9a22f7c244638b3caab3c5998177.jpg)
我有一种情况,我从外部公司收到XML(文档)文件.我需要过滤文档以删除我不感兴趣的所有数据.
该文件大约500KB,但将经常请求.
让我们说以下文件:
<dvdlist>
<dvd>
<title>title 1</title>
<director>directory 2</director>
<price>1</price>
<location>
<city>denver</city>
</location>
</dvd>
<dvd>
<title>title 2</title>
<director>directory 2</director>
<price>2</price>
<location>
<city>london</city>
</location>
</dvd>
<dvd>
<title>title 3</title>
<director>directory 3</director>
<price>3</price>
<location>
<city>london</city>
</location>
</dvd>
</dvdlist>
我需要的是简单地根据city = london过滤文档,以便最终得到这个新的XML文档
<dvdlist>
<dvd>
<title>title 2</title>
<director>directory 2</director>
<price>2</price>
<location>
<city>london</city>
</location>
</dvd>
<dvd>
<title>title 3</title>
<director>directory 3</director>
<price>3</price>
<location>
<city>london</city>
</location>
</dvd>
</dvdlist>
我尝试了以下内容
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\Development\Website\dvds.xml");
XmlNode node = doc.SelectSingleNode("dvdlist/dvd/location/city[text()='london']");
任何帮助或链接将不胜感激
谢谢
解决方法:
XPath是一种选择表达式语言 – 它永远不会修改它所操作的XML文档.
因此,为了获得所需的新XML文档,您需要使用XML DOM(不推荐)或将XSLT转换应用于XML文档.后者是推荐的方法,因为XSLT是一种专为树转换而设计的语言.
在.NET中,可以使用XslCompiledTransform类及其Transform()方法.在relevant MSDN documentation中了解更多相关信息.
XSLT转换本身非常简单:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="dvd[not(location/city='london')]"/>
</xsl:stylesheet>
Here,您可以找到一个完整的代码示例,如何获取转换结果作为XmlDocument(或者如果需要,作为XDocument).
内容总结
以上是互联网集市为您收集整理的通过使用xpath过滤c#中的现有文档来创建新的XMLDocument全部内容,希望文章能够帮你解决通过使用xpath过滤c#中的现有文档来创建新的XMLDocument所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。