C# 用C读取和显示XML#

C# 用C读取和显示XML#,c#,xml,xmlreader,C#,Xml,Xmlreader,下面的代码无法显示任何内容。我只是尝试从xml文件中读取数据,并将其与应用程序一起显示。据我所知,批处理编译器将是我的根节点。最终,我将把数据放在一个csv文件中,但我会慢慢来确定并理解所有部分。任何建议都很好 XML }这里有一些问题 您的XML无效。如果您实际将文件加载到内存中,则可能会遇到异常(根据前面的问题,您认为是这样)。您有几个未关闭的标记:、、和都是示例文档中缺少的关闭标记 如果这些分散的文本节点分散在整个文档中(示例文档中的+和-部分),您可能会遇到问题 如果试图从XmlRead

下面的代码无法显示任何内容。我只是尝试从xml文件中读取数据,并将其与应用程序一起显示。据我所知,批处理编译器将是我的根节点。最终,我将把数据放在一个csv文件中,但我会慢慢来确定并理解所有部分。任何建议都很好

XML


}这里有一些问题

  • 您的XML无效。如果您实际将文件加载到内存中,则可能会遇到异常(根据前面的问题,您认为是这样)。您有几个未关闭的标记:
    都是示例文档中缺少的关闭标记
  • 如果这些分散的文本节点分散在整个文档中(示例文档中的
    +
    -
    部分),您可能会遇到问题
  • 如果试图从
    XmlReader
    加载
    XElement
    ,请在完成
    XElement
    之前不要关闭
    XmlReader
    。更好的是,将
    XmlReader
    包装在
    using
    块中,并将
    XElement
    的用法放在该using块中
  • 这里甚至不需要使用
    XmlReader
    ,只需使用
    XElement.Load()
    方法即可。例如,
    XElement el=XElement.Load(“C:\\example\\extract\\index.xml”)。当然,所有这些都假定您实际获得了一个有效的XML文档
  • 您的
    .Elements()
    调用看起来是错误的,但无法在文档的当前状态下修复它们,因为无法按原样解析文档
  • 在将来,请尝试发布您得到的特定错误以及您迄今为止尝试解决该错误的步骤-例如,您应该在这里得到一个异常,如

    第10行位置6上的“值”开始标记与“事务”的结束标记不匹配。第20行,位置6


    看看如何解决这个问题——这实际上意味着首先要获得一个有效的XML文档——然后,如果您仍然有问题,您可以在一个更好的地方发布一个问题。

    正如Dan所说,您的XML无效,应该是:

    <BatchCompiler>
      <batch>
       <batchid>955698</batchid>
       <transactions>
        <transaction>
         <image>..\images\955698_1_.tif</image>
         <items>
          <item>
            <values>
              <value>
               <name>Bill Base Number</name>
               <data>0002025330</data>     
              </value>
              <value>
               <name>acct_num2</name>
               <data/>
              </value>
              <value>
               <name>Tax Year</name>
               <data>2015</data>
              </value>
            </values>
          </item>
         </items>
        </transaction>
       </transactions>
      </batch>
    </BatchCompiler>
    

    上面/下面的答案用于获取名称值

        static void Main(string[] args)
        {
    
                XElement xml = XElement.Load("c:\\example\\extract\\index.xml");
    
    
               var items = xml.Descendants("name");
    
    
            foreach (var element in items) 
             {
                Console.WriteLine(element.Value);
    
             }
    
                Console.WriteLine("Finished");
                Console.ReadLine();
       }
    

    不,我最近问过访问。现在我已经过去了,我在读取数据时遇到了问题@SimonPricel.Elements(“BatchCompiler”).Elements(“BatchCompiler”).DegenantNodes();看起来可疑。我正在运行你的代码,如果XML格式不正确。。。这就是为什么您在读取数据时遇到问题我已经更改了您的XML使其有效,现在将读取,但是您的其他代码需要处理。为什么您要将XML代码更改回无效标记?谢谢。。这对我有用。我的xml文件很好,我只是在浏览器中查看xml时尝试复制其中的一部分。我添加了下面的代码,试图获取另一个dat,但似乎这是唯一写入的数据。我还试图在for-each子句中添加and“&”,但出现了一个错误。var data=xml.substands(“数据”);foreach(数据中的var元素){Console.WriteLine(element.Value);}Console.WriteLine(“完成的数据”)我可以用这种方式获取所有数据吗?如果你想要所有数据,你可能想要将xml反序列化为一个对象图,但是你可以使用XElement作为数据源,因为你可以像上面所看到的那样从驱动器加载它,从中读取,写入,添加元素,删除元素等,然后使用将其写回驱动器。完成后保存。您可以获取三个“值”元素并逐步遍历它们,并将它们作为一对“名称”和“数据”保存
    <BatchCompiler>
      <batch>
       <batchid>955698</batchid>
       <transactions>
        <transaction>
         <image>..\images\955698_1_.tif</image>
         <items>
          <item>
            <values>
              <value>
               <name>Bill Base Number</name>
               <data>0002025330</data>     
              </value>
              <value>
               <name>acct_num2</name>
               <data/>
              </value>
              <value>
               <name>Tax Year</name>
               <data>2015</data>
              </value>
            </values>
          </item>
         </items>
        </transaction>
       </transactions>
      </batch>
    </BatchCompiler>
    
    static void Main(string[] args)
    {
        XElement xml = XElement.Load(@"c:\Temp\index.xml");
    
        var items = xml.Descendants("name");
    
        foreach (var element in items)
        {
            Console.WriteLine(element.Value);
        }
    
        Console.WriteLine("Finished");
        Console.ReadLine();
    }
    
        static void Main(string[] args)
        {
    
                XElement xml = XElement.Load("c:\\example\\extract\\index.xml");
    
    
               var items = xml.Descendants("name");
    
    
            foreach (var element in items) 
             {
                Console.WriteLine(element.Value);
    
             }
    
                Console.WriteLine("Finished");
                Console.ReadLine();
       }