0

おおよそ次のような XML ドキュメントがあります。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Multiple xmlns:ns2="someNs2" xmlns="someGenericNs" xmlns:ns4="someNs4" xmlns:ns3="someNs3">
  <Single>
    <Id>60000</Id>
    <Type>Activate</Type>
    <Payload>
      <ns3:Activation>
        <ns3:Parent>
          <ns3:TypeId>113</ns3:TypeId>
          <ns3:TypeName>TestApplication</ns3:TypeName>
        </ns3:Parent>
        <ns3:Children>
          <ns3:Child>
            <ns3:Key>someKey</ns3:Key>
            <ns3:ChildTypeName>BadAppType1</ns3:ChildTypeName>
          </ns3:Child>
          <ns3:Child>
            <ns3:Key>someOtherKey</ns3:Key>
            <ns3:ChildTypeName>GoodAppType1</ns3:ChildTypeName>
          </ns3:Child>
        </ns3:Children>
      </ns3:Activation>
    </Payload>
  </Single>
</Multiple>

ファイルに複数の「子」ノードが含まれている場合、既存の子ノードごとに 1 つのファイルで、複数のファイルに分割したいと考えています。このようなもの:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Multiple xmlns:ns2="someNs2" xmlns="someGenericNs" xmlns:ns4="someNs4" xmlns:ns3="someNs3">
  <Single>
    <Id>60000</Id>
    <Type>Activate</Type>
    <Payload>
      <ns3:Activation>
        <ns3:Parent>
          <ns3:TypeId>113</ns3:TypeId>
          <ns3:TypeName>TestApplication</ns3:TypeName>
        </ns3:Parent>
        <ns3:Children>
          <ns3:Child>
            <ns3:Key>someOtherKey</ns3:Key>
            <ns3:ChildTypeName>GoodAppType2</ns3:ChildTypeName>
          </ns3:Child>
        </ns3:Children>
      </ns3:Activation>
    </Payload>
  </Single>
</Multiple>

次に、他の「子」ノードを含む新しい XmlDoc。これは LINQ で実現できますか?

これまでの私のコードは次のとおりです。

 private bool HasMoreThanOneChild(string xml) {
          XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);

                if (doc.GetElementsByTagName("ns3:Child").Count > 1)
                {
                    return true;
                }

        return false;
    }

public List<string> DoSomething(XmlDocument doc){

if(HasMoreThanOneChild(doc.InnerXml))
return Split(doc);
}

ドキュメントが分割されると、「InnerXML」にもっと興味があるので、そこにリストを返しました。しかし、可能であれば、この分割を実装する方法がわかりません。

4

1 に答える 1