【问题标题】:C# xsd xmlreader, how to count attribute namesC# xsd xmlreader,如何计算属性名
【发布时间】:2014-08-18 05:03:44
【问题描述】:

这对你们来说可能很简单,但是当使用 c# 针对模式验证 xml 时,我需要能够计算 xml 文档中的属性名称。特别是重复的属性名称(无效)。

如果我的 xsd 里面有这些:

<xsd:schema>    
<xsd:complexType name="scheduleEvent">     
    <xsd:all>     
        <xsd:element name="Basic" type="MyBasic"/>
    </xsd:all>
 </xsd:complexType> 
   <xsd:complexType name="MyBasic">    
    <xsd:choice minOccurs="0" maxOccurs="unbounded">    
        <xsd:element name="Descriptor" type="Descriptor" maxOccurs="1"/>     
        <xsd:element name="Descriptor1" type="Descriptor1" maxOccurs="1"/>    
   </xsd:choice>    
   </xsd:complexType>    
   <xsd:complexType name="Descriptor">    
    <xsd:attribute name="Test" type="typ:Test"/>    
   </xsd:complexType>    
   <xsd:complexType name="Descriptor1">    
      <xsd:attribute name="Test1" type="typ:Test1"/>    
  </xsd:complexType>    

我要验证的 xml 看起来像(无效,我只知道一个快速模拟示例供参考:

声明等...

<ScheduleEvent>
 <MyBasic>
  <Descriptor Test="02"/>
  <Descriptor1 Test1="02" Test1="02"/> 
</MyBasic>
</ScheduleEvent>

如何计算“Test1”属性的数量? C# xmlreader(不使用异常,长篇大论)。

【问题讨论】:

    标签: c# xsd xmlreader


    【解决方案1】:

    首先,这不是一个有效的 xml。每个元素的属性都是唯一的。

    如果您认为可以在不同元素中拥有多个“Test1”属性,那么您可以使用LINQ to XML 执行以下操作:

    var xml = XDocument.Load(@"PathToXml");
    var testCount = xml.Descendants().Attributes("Test1").Count();
    

    【讨论】:

    • 感谢 Yuval 和 Thirisangu 提供的答案。我最终绕过了提供模式异常消息的 xsd 异常,以排除某些重复错误。但是感谢您的建议,以备将来使用!
    【解决方案2】:

    试试这个:

    XDocument doc=XDocument.Load(XMLFile or XMLFilePath);
    var Sample=doc.Descendants("Test1").Count();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-18
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      相关资源
      最近更新 更多