首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用行号C#查找XML文件中的节点?

如何使用行号C#查找XML文件中的节点?
EN

Stack Overflow用户
提问于 2016-06-23 03:34:37
回答 4查看 1.3K关注 0票数 1

下面有XML文件。当我在Process中使用它时,它给我的错误就像

2016-06-22 19:29:53 IST错误:“第15栏第20栏:”电子元器件的字符内容无效;必须等于XPath /products/product1 1/item_type中的“食品”、“货物”或“手机”。

此XPath /products/product[1]不正确。这是他们的系统的回报。所以,我必须搜索它,并通过行替换原始值不只是。

Order.xml

代码语言:javascript
复制
<products>
    <product>
        <country>AE</country>
        <sale>false</sale>
        <item_type>foods</item_type>
    </product>
    <product>
        <country>IN</country>
        <sale>false</sale>
        <item_type>goods</item_type>
    </product>
    <product>
        <country>US</country>
        <sale>false</sale>
        <item_type>electronics</item_type>
    </product>
    <product>
        <country>AM</country>
        <sale>false</sale>
        <item_type>mobiles</item_type>
    </product>
</products>

请让我知道使用XML文档中的第15行进行搜索

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-06-23 07:33:47

在处理xml时,不应该依赖行/冒号。Xml不太关心空格,格式化只是方便可读性;虽然在您的示例中正确地报告了它,但我不相信将来会是这样。有趣的是,xpath也是不正确的,但是暂时不要过多地讨论这个问题。

你得重新控制问题..。您应该创建自己的验证读取器,并在解析xml时捕获验证错误。如何做到这一点将取决于您所使用的框架。XmlValidatingReader或,XmlReader与适当的XmlReaderSettings。您可以在读取xml文件时设置回调/均衡器来捕获错误,这样您就可以确定您的位置是正确的,并掌握处理该错误所需的所有信息。使用XmlReader还将允许您继续处理整个文件,而不仅仅是在第一个错误时停止。

代码太大了,我们需要从您那里获得更多的信息,但是google搜索会发现很多例子,包括microsoft:https://msdn.microsoft.com/en-us/library/w5aahf2a(v=vs.100).aspx的例子。

  1. 构造一个新的XmlReaderSettings实例。
  2. 将XML添加到XmlReaderSettings实例的架构属性中。
  3. 将架构指定为ValidationType。
  4. 指定ValidationFlags和ValidationEventHandler来处理验证过程中遇到的架构验证错误和警告。
  5. 将XmlReaderSettings对象与XmlReader一起传递给XmlReader类的Create方法,创建模式验证XmlReader。
  6. 调用Read()从头到尾遍历xml。
票数 2
EN

Stack Overflow用户

发布于 2016-06-23 03:49:16

这对你有用吗?

代码语言:javascript
复制
string[] lines = File.ReadAllLines(@"C:\order.xml", Encoding.UTF8);
var line15 = lines[14];
票数 0
EN

Stack Overflow用户

发布于 2016-06-23 05:33:48

代码语言:javascript
复制
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\order.xml");
XmlElement el =(XmlElement)doc.SelectSingleNode("/products/product[1]/item_type");
if(el != null) { el.ParentNode.RemoveChild(el); }

您可以通过使用上面的code...using正确的Xpath删除节点,您可以删除不等于食物、好的或移动的所有item_type。

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

https://stackoverflow.com/questions/37981882

复制
相关文章

相似问题

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