解决 LINQ TO XML格式:如何获取元素?

loris04

新成员
已加入
2020年10月27日
留言内容
3
编程经验
1-3
我有这个xml结构:
XMLstructure:
<?xml version="1.0" encoding="utf-8"?>
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
    <asx:values>
        <SALESORDER>
            <EXTENSIONIN>
                <item>
                    <CONFIRMATIONPRINTDATE />
                    <CUSTOMEROFFERNOTE />
                    <CUSTOMERREFERENCE />
                </item>
            </EXTENSIONIN>
            <ORDERCFGSVALUE>
                <item>
                    <CHARC>DRAWING_LANGUAGE_CRM</CHARC>
                </item>
                <item>
                    <CHARC>EOS_QUOT_ORD_TYPE</CHARC>
                </item>
                <item>
                    <CHARC>GRP_BRANCH_EFFICIENCY_FACTOR</CHARC>
                </item>
            </ORDERCFGSVALUE>
        </SALESORDER>
    </asx:values>
</asx:abap>
我需要元素中的所有元素"item" in the element "ORDERCFGSVALUE"。有谁知道正确的LINQ查询是什么?
我已经尝试过这些查询:

Tested queries::
项目s = from values in xdocument.Descendants("ORDERCFGSVALUE").Elements("item").Elements()
select values;

items = from values in xdocument.Descendants("ORDERCFGSVALUE").Descendants("item").Elements()
select values;

items = from values in xdocument.Descendants("ORDERCFGSVALUE").Descendants("CHARC")
select values;

不幸的是我没有结果。
This query works to get the 项目s of element EXTENSIONIN:


Working query::
项目s = from values in xdocument.Descendants("EXTENSIONIN").Elements("item").FirstOrDefault().Elements()
select values;

结果应为:
Result:
<CHARC>DRAWING_LANGUAGE_CRM</CHARC>
<CHARC>EOS_QUOT_ORD_TYPE</CHARC>
<CHARC>GRP_BRANCH_EFFICIENCY_FACTOR</CHARC>


先感谢您。
 
由主持人最后编辑:
Solution
这对我来说很好:
C#:
            var xdocument = XElement.Parse(@"<?xml version=""1.0"" encoding=""utf-8""?>
<asx:abap xmlns:asx=""http://www.sap.com/abapxml"" version=""1.0"">
    <asx:values>
        <SALESORDER>
            <EXTENSIONIN>
                <item>
                    <CONFIRMATIONPRINTDATE />
                    <CUSTOMEROFFERNOTE />
                    <CUSTOMERREFERENCE />
                </item>
            </EXTENSIONIN>
            <ORDERCFGSVALUE>
                <item>
                    <CHARC>DRAWING_LANGUAGE_CRM</CHARC>
                </item>
                <item>
                    <CHARC>EOS_QUOT_ORD_TYPE</CHARC>
                </item>
                <item>...

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,498
地点
悉尼,澳大利亚
编程经验
10+
这对我来说很好:
C#:
            var xdocument = XElement.Parse(@"<?xml version=""1.0"" encoding=""utf-8""?>
<asx:abap xmlns:asx=""http://www.sap.com/abapxml"" version=""1.0"">
    <asx:values>
        <SALESORDER>
            <EXTENSIONIN>
                <item>
                    <CONFIRMATIONPRINTDATE />
                    <CUSTOMEROFFERNOTE />
                    <CUSTOMERREFERENCE />
                </item>
            </EXTENSIONIN>
            <ORDERCFGSVALUE>
                <item>
                    <CHARC>DRAWING_LANGUAGE_CRM</CHARC>
                </item>
                <item>
                    <CHARC>EOS_QUOT_ORD_TYPE</CHARC>
                </item>
                <item>
                    <CHARC>GRP_BRANCH_EFFICIENCY_FACTOR</CHARC>
                </item>
            </ORDERCFGSVALUE>
        </SALESORDER>
    </asx:values>
</asx:abap>");

            var query = xdocument.Descendants("ORDERCFGSVALUE").Descendants("item").Descendants("CHARC");

            var values = query.ToArray();

1603788304145.png
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,498
地点
悉尼,澳大利亚
编程经验
10+
根据您提供的XML,由于没有其他元素,您甚至不需要最后两个调用的过滤器:
C#:
var query = xdocument.Descendants("ORDERCFGSVALUE").Descendants().Descendants();
要么:
C#:
var query = xdocument.Descendants("ORDERCFGSVALUE").Elements().Elements();
 

loris04

新成员
已加入
2020年10月27日
留言内容
3
编程经验
1-3
All three of your "Tested queries"为我工作,并获得与查询相同的结果 @jmcilhinney 发布。

I used XDocument.Load to load the test data file by the way. How have you loaded your xdocument ?
我也是:
C#:
 XDocument xdocument = XDocument.Load(filepath);
但是这个问题已经澄清了。谢谢。
 
最佳 底部