linq 访问深层 xml 数据时出现问题

问题描述 投票:0回答:1

我正在尝试使用 linq 访问 xml 文件深处的 xml 数据。我一直在看这些例子: linq linq

我没有看到一个不涉及名字的好例子。

到目前为止我有这个代码:

string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string newPath = Path.GetFullPath(Path.Combine(path, @"..\.."));
string finalPathXml = Path.GetFullPath(Path.Combine(newPath, @"BuildVerificationBuildAttributes.xml"));

//linq 

    XDocument xmlDoc1 = XDocument.Load(finalPathXml);
    XElement buildVerificationElement = xmlDoc1.Element("BuildVerification");
    IEnumerable<XElement> buildElements = buildVerificationElement.Elements("build");
    IEnumerable<XElement> buildMachines = buildElements.Elements("BuildMachine"); //works. Has build machine and info in it.
    
    //this doesn't work...all empty
    IEnumerable<XElement> processes = buildMachines.Elements("Process");
    IEnumerable<XElement> processNames = processes.Elements("ProcessName");
    IEnumerable<XElement> conditions = processNames.Elements("Conditions");

    foreach (XElement buildMachine in buildMachines)
    {
        //var cond1 = xmlDoc1.Descendants("")
        //foreach condition
      //{
      //path = 
      //for each success criteria
      //{
      //field=
      //comparison=
      //value=
      //}
      //}
      //for each BuildMachine, I need to obtain each condition(s) and it's subsequent dest path,
      // and success criteria/field/comparison/value. Then I can go and see if we meet the 
      //criteria for that machine and case.  I'm having trouble finding how to get those deeper 
      //info in the xml 
}

这就是我的 xml 的样子:

<?xml version="1.0" encoding="UTF-8"?>
<BuildVerification>
    <build>
        <BuildMachine>mach-31</BuildMachine>
            <Process>
                <ProcessName>SpinFileVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <VersionFile>”\\view\Build_NightlyDeveloper\filename.cs”</VersionFile>
                            <SuccessCriteria>
                                <field>Status</field>
                                <comparison>equal</comparison> 
                                <value>Success</value>
                            </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>
            <Process>
                <ProcessName>SpinFileVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <VersionFile>”\\view\Build_NightlyDeveloper\filename2.txt”</VersionFile>

                                <SuccessCriteria>
                                    <field>Status</field>
                                    <comparison>equal</comparison>
                                    <value>Success</value>

                                </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>
            <Process>
                <ProcessName>SpinFileVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <VersionFile>”\\view\Build_NightlyDeveloper\filename.h”</VersionFile>

                            <SuccessCriteria>
                            <field>Status</field>
                            <comparison>equal</comparison>
                            <value>Success</value>

                            </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>

        </build>
        
         <!-- Next -->
        <build>
        <BuildMachine>mach-46</BuildMachine>
            <Process>
                <ProcessName>SpinFileVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <VersionFile>”\\view\Build_NightlyDeveloper\filename.cs”</VersionFile>
                            <SuccessCriteria>
                                <field>Status</field>
                                <comparison>equal</comparison> 
                                <value>Success</value>
                            </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>
            <Process>
                <ProcessName>SpinFileVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <VersionFile>”\\view\Build_NightlyDeveloper\filename.h”</VersionFile>

                                <SuccessCriteria>
                                    <field>Status</field>
                                    <comparison>equal</comparison>
                                    <value>Success</value>

                                </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>
            <Process>
                <ProcessName>SpinFileVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <VersionFile>”\\view\Build_NightlyDeveloper\filename.cs”</VersionFile>

                            <SuccessCriteria>
                            <field>Status</field>
                            <comparison>equal</comparison>
                            <value>Success</value>

                            </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>
            
            <Process>
                <ProcessName>SpinFileVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <VersionFile>”\\view\Build_NightlyDeveloper\filename.cs”</VersionFile>
                            <SuccessCriteria>
                                <field>Status</field>
                                <comparison>equal</comparison> 
                                <value>Success</value>
                            </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>
            <Process>
                <ProcessName>SpinFileVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <VersionFile>”\\view\Build_NightlyDeveloper\filename.cs”</VersionFile>

                                <SuccessCriteria>
                                    <field>Status</field>
                                    <comparison>equal</comparison>
                                    <value>Success</value>

                                </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>
            <Process>
                <ProcessName>SpinFileVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <VersionFile>”\\view\Build_NightlyDeveloper\filename.h”</VersionFile>

                            <SuccessCriteria>
                            <field>Status</field>
                            <comparison>equal</comparison>
                            <value>Success</value>

                            </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>
            
                        
            <Process>
                <ProcessName>SpinFileVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <VersionFile>”\\view\Build_NightlyDeveloper\filename.cs”</VersionFile>
                            <SuccessCriteria>
                                <field>Status</field>
                                <comparison>equal</comparison> 
                                <value>Success</value>
                            </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>
            <Process>
                <ProcessName>SpinFileVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <VersionFile>”\\view\Build_NightlyDeveloper\filename.cs”</VersionFile>

                                <SuccessCriteria>
                                    <field>Status</field>
                                    <comparison>equal</comparison>
                                    <value>Success</value>

                                </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>
            <Process>
                <ProcessName>SpinFileVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <VersionFile>”\\view\Build_NightlyDeveloper\filename.cs”</VersionFile>

                            <SuccessCriteria>
                                <field>Status</field>
                                <comparison>equal</comparison>
                                <value>Success</value>

                            </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>
            
            
            <Process>
                <ProcessName>SpinISProjectVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <ProductName>ABC</ProductName>

                            <SuccessCriteria>
                                <field>Status</field>
                                <comparison>equal</comparison>
                                <value>Success</value>

                            </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>
            <Process>
                <ProcessName>SpinISProjectVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <ProductName>CDE</ProductName>

                            <SuccessCriteria>
                                <field>Status</field>
                                <comparison>equal</comparison>
                                <value>Success</value>

                            </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>
            <Process>
                <ProcessName>SpinISProjectVersionStats</ProcessName>
                    <Conditions>
                        <Condition>
                            <ProductName>EFG</ProductName>

                            <SuccessCriteria>
                                <field>Status</field>
                                <comparison>equal</comparison>
                                <value>Success</value>

                            </SuccessCriteria>
                        </Condition>
                    </Conditions>
            </Process>

        </build>
c# xml linq linq-to-xml
1个回答
0
投票

请尝试以下解决方案。

c#

void Main()
{
    const string FILENAME = @"e:\Temp\Michele.xml";

    XDocument xdoc = XDocument.Load(FILENAME);
    
    foreach (var elem in xdoc.Descendants("SuccessCriteria"))
    {
        Console.WriteLine("field='{0}', comparison='{1}', value='{2}'",
            elem.Element("field")?.Value,
            elem.Element("comparison")?.Value,
            elem.Element("value")?.Value);
    }
}

输出

field='Status', comparison='equal', value='Success'
field='Status', comparison='equal', value='Success'
...
© www.soinside.com 2019 - 2024. All rights reserved.