首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C#中读取特定XML文件中的元素?

如何在C#中读取特定XML文件中的元素?
EN

Stack Overflow用户
提问于 2016-12-22 22:23:48
回答 2查看 111关注 0票数 0

我的文件XML:

代码语言:javascript
运行
复制
<document xmlns="http://www.abbyy.com/FineReader_xml/FineReader10-schema-v1.xml" version="1.0" producer="ABBYY FineReader Engine 11" languages="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abbyy.com/FineReader_xml/FineReader10-schema-v1.xml http://www.abbyy.com/FineReader_xml/FineReader10-schema-v1.xml">
 <page width="1006" height="636" resolution="300" originalCoords="1" rotation="RotatedUpsidedown">


<block blockType="Text" blockName="" l="979" t="613" r="1006" b="636"><region><rect l="979" t="613" r="1006" b="636"/></region>
<text>
<par lineSpacing="890">
<line baseline="17" l="985" t="620" r="1006" b="636"><formatting lang="EnglishUnitedStates"><charParams l="985" t="620" r="1006" b="636" suspicious="1">r</charParams></formatting></line></par>
</text>
</block>


<block blockType="Barcode" blockName="" l="242" t="21" r="772" b="116"><region><rect l="242" t="21" r="772" b="116"/></region>
<text>
<par><line baseline="0" l="0" t="0" r="0" b="0"><formatting lang="">049102580225180310</formatting></line></par>
</text>
<barcodeInfo type="INTERLEAVED25"/>
</block>

</page>
</document>

我要摘录编号049102580225180310位于<formatting>..</formatting>

我试着用这个代码:

代码语言:javascript
运行
复制
XElement racine = XElement.Load("test_XML.xml");

var query = from xx in racine.Elements(XName.Get("block"))
            select new
            {
                CodeBar= xx.Attribute(XName.Get("formatting")).Value
            };

但我什么都没有

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-22 23:00:02

这里有一个控制台程序,它获取第二个格式( lang='')节点。

代码语言:javascript
运行
复制
using System;
using System.Xml;

namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            XmlDocument xml = new XmlDocument();
            xml.Load("c:\\temp\\test.xml");

            NameTable nt = new NameTable();
            XmlNamespaceManager nsmgr;
            nsmgr = new XmlNamespaceManager(nt);
            nsmgr.AddNamespace("html", xml.DocumentElement.NamespaceURI);

            XmlNode ndFormat = xml.SelectSingleNode("//html:formatting[@lang='']", nsmgr);
            if (ndFormat != null) {
                Console.WriteLine(ndFormat.InnerText);
            }

        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2016-12-22 22:51:30

你这里有几个问题:

  • XML在根节点中有一个默认名称空间: <文档xmlns="xml/FineReader10 10-schema-v1.xml“version="1.0” 因此,所有子元素都在这个名称空间中,因此当通过其Name查询元素时,在构造要搜索的XName时必须使用适当的名称空间。
  • <formatting>节点不是<block>节点的直接子节点,它们嵌套在几个<block>级别中。而且,它们是XML元素,而不是XML属性。 类似地,<block>元素不是<document>根元素的直接子元素,它们嵌套在<page>元素中。 在这种情况下,可以使用XElement.Descendants(name)按名称查找嵌套元素。

因此,您的查询应该是:

代码语言:javascript
运行
复制
var ns = racine.Name.Namespace; // The root default namespace used by all the elements in the XML.

var query = from block in racine.Descendants(ns + "block")
            from formatting in block.Descendants(ns + "formatting")
            select new
            {
                CodeBar= (string)formatting,
            };  

输出两个小提琴元素值的示例<formatting>

代码语言:javascript
运行
复制
{ CodeBar = r }
{ CodeBar = 049102580225180310 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41292520

复制
相关文章

相似问题

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