【问题标题】:Parsing Attribute values of XML into a CSV using C#使用 C# 将 XML 的属性值解析为 CSV
【发布时间】:2017-11-25 23:58:13
【问题描述】:

我将以下 xml 作为主要 xml 的一部分。能够将其提取到字符串中,现在我想解析下面的 xml 并将属性名称 PersonN 、 VerifiedHuman 、 CurrAddrBlockIndex 的值放入单独的 csv 文件中 请告诉我如何解决这个问题?

我正在尝试解析的 XML:

<InterConnectResponse>
  <SchemaVersion>2.0</SchemaVersion>
  <ConsumerSubjects>
    <ConsumerSubject subjectIdentifier="Primary">
      <DataSourceResponses>
      <RiskViewProducts>
          <RiskViewAttribResponse>
          <Attributes>
                <Attribute>
                  <Name>PersonN</Name>
                  <Value>3</Value>
                </Attribute>
                <Attribute>
                  <Name>VerifiedHuman</Name>
                  <Value>2</Value>
                </Attribute>
                <Attribute>
                  <Name>CurrAddrBlockIndex</Name>
                  <Value>0.61</Value>
                </Attribute>
         </Attributes>
         </RiskViewAttribResponse>
     </RiskViewProducts>
     </DataSourceResponses>
    </ConsumerSubject>
  </ConsumerSubjects>
</InterConnectResponse>   

预期输出文件:

3, 2, 0.61    

我试过了,但没有成功

  StringBuilder output = new StringBuilder();   
  using (XmlReader reader = XmlReader.Create(new StreamReader(value)))
            {

                reader.ReadToFollowing("PersonN");
                string LNREF72 = reader.Value;
                output.AppendLine(LNREF72);
                reader.ReadToFollowing("VerifiedHuman");
                string VerifiedHuman = reader.Value;
                output.AppendLine(", " + VerifiedHuman);
                reader.ReadToFollowing("CurrAddrBlockIndex");
                string CurrAddrBlockIndex = reader.Value;
                output.AppendLine(", " + CurrAddrBlockIndex);

            }     

【问题讨论】:

    标签: c# xml xml-parsing linq-to-xml


    【解决方案1】:

    不是我会做的方式,但如果您要使用 XmlReader,这将是做您想做的事情的方式。

    请查看 XmlDocument 或其他十几种解析 XML 的方法中的一种,它比 XmlReader 更好。

    StringBuilder output = new StringBuilder();
    using (XmlReader reader = XmlReader.Create(new StreamReader(value)))
    {
        bool isValue = false;
        while (reader.Read())
        {
            if (reader.NodeType == XmlNodeType.Element && reader.Name == "Value")
            {
                isValue = true;
            }
    
            if (reader.NodeType == XmlNodeType.Text && isValue)
            {
                output.AppendLine((output.Length == 0 ? "" : ", ") + reader.Value);
                isValue = false;
            }
        }
    }
    

    【讨论】:

    • 我收到错误SystemArgumentException : Illegal Characters in Path 在行:` using (XmlReader read = XmlReader.Create(new StreamReader(str3)))`
    • 我不知道 str3 的值,所以除非你发布这个值,否则我无法评论。
    • 哎呀对不起! str3 是我发布的xml
    • StreamReader 获取 xml 文件的路径。 IE "C:\test.xml"
    • 将 StreamReader 更改为 StringReader
    猜你喜欢
    • 1970-01-01
    • 2015-09-04
    • 2019-12-28
    • 1970-01-01
    • 2021-07-04
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多