【问题标题】:Selecting a sub XML as string选择子 XML 作为字符串
【发布时间】:2014-07-09 15:53:30
【问题描述】:

我有以下 XML:

<Run id="1">
  <Servers>
    <Server id="1" fqdn="ENG-HSINGH">
      <Roles>
        <Role id="1" rootFolder="C:\DeleteMe"/>
      </Roles>
    </Server>
  </Servers>
  <Roles>
    <Role id="1">
      <ValidationInformation>
        <ValidationObject>
          <FileSystem>
            <Directory path="\A\HTML">
              <File id="1" path="\A\HTML\1.HTM"/>
              <File id="2" path="\A\HTML\2.ASP" />
            </Directory>
            <Directory path="\B\EntireFolder">
              <File id="8" path="\B\EntireFolder\1.txt"/>
              <File id="9" path="\B\EntireFolder\2.txt"/>
              <File id="10" path="\B\EntireFolder\3.txt"/>
              <File id="11" path="\B\EntireFolder\4.txt"/>
              <File id="12" path="\EHR\EntireFolder\5.txt"/>
            </Directory>
            <Files>
              <File id="4" path="\C\6.txt"/>
            </Files>
          </FileSystem>
        </ValidationObject>
      </ValidationInformation>
    </Role>
    <Role id="2">
      <ValidationInformation>
        <ValidationObject>
          <FileSystem>
            <Directory path="\D\HTML">
              <File id="13" path="\D\HTML\1.HTM"/>
            </Directory>
            <Directory path="\E">
              <File id="14" path="\E\1.txt"/>
            </Directory>
            <Files>
              <File id="15" path="\F\1.txt"/>
            </Files>
          </FileSystem>
        </ValidationObject>
      </ValidationInformation>
    </Role>
  </Roles>
</Run>

我想将这个 XML 读入一个代表角色的字典,它是对应的 ValidationInformation sub XML as string.e.g.

1, "&lt;ValidationObject&gt;&lt;FileSystem&gt;&lt;Directory path='\A\HTML'&gt;&lt;File id='1' path='\A\HTML\1.HTM'/&gt;&lt;File id='2' path='\A\HTML\2.ASP' /&gt;&lt;/Directory&gt;&lt;Directory path='\B\EntireFolder'&gt;&lt;File id='8' path='\B\EntireFolder\1.txt'/&gt;&lt;File id='9' path='\B\EntireFolder\2.txt'/&gt;&lt;File id='10' path='\B\EntireFolder\3.txt'/&gt;&lt;File id='11' path='\B\EntireFolder\4.txt'/&gt;&lt;File id='12' path='\EHR\EntireFolder\5.txt'/&gt;&lt;/Directory&gt;&lt;Files&gt;&lt;File id='4' path='\C\6.txt'/&gt;&lt;/Files&gt;&lt;/FileSystem&gt;&lt;/ValidationObject&gt;"

2, "&lt;ValidationObject&gt;&lt;FileSystem&gt;&lt;Directory path='\D\HTML'&gt;&lt;File id='13' path='\D\HTML\1.HTM'/&gt;&lt;/Directory&gt;&lt;Directory path='\E'&gt;&lt;File id='14' path='\E\1.txt'/&gt;&lt;/Directory&gt;&lt;Files&gt;&lt;File id='15' path='\F\1.txt'/&gt;&lt;/Files&gt;&lt;/FileSystem&gt;&lt;/ValidationObject&gt;"

我知道我可以读取每个角色的 ValidationInformation 节点下的 XML 节点并粘贴生成的 XML,但这似乎不是一个好方法。

有没有更清洁的方法来做到这一点?

谢谢, H

【问题讨论】:

    标签: c# .net xml


    【解决方案1】:

    这对我有用:

    Dictionary<int, string> myDictionary = new Dictionary<int, string>();
                XmlDocument xml = new XmlDocument();
                xml.LoadXml(<myInputXMLAsString>);
                XmlNodeList xnList = xml.SelectNodes("/Run/Roles");
    
                foreach (XmlNode xn in xnList)
                {
                    int roleId = int.Parse(xn["Role"].Attributes["id"].Value);
                    XmlDocument subXmlDocument = new XmlDocument();
                    subXmlDocument.LoadXml(xn.InnerXml);
                    XmlNodeList subXn = subXmlDocument.SelectNodes("/Role/ValidationInformation");
                    string validationInfo = subXn[0].InnerXml;
                    roleIdToValidationInformationDictionary.Add(roleId, validationInfo);
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      相关资源
      最近更新 更多