我有我需要以提取参数解析以下XML示例:不能提取元素(按元素名称和属性)
<?xml version="1.0" encoding="UTF-8"?>
<bulkCmConfigDataFile xmlns:un="utranNrm.xsd" xmlns:xn="genericNrm.xsd" xmlns:gn="geranNrm.xsd" xmlns="configData.xsd"
xmlns:es="Vendor1SpecificAttributes.1.0.xsd">
<fileHeader fileFormatVersion="1.0" vendorName="Vendor1"/>
<configData dnPrefix="Undefined">
<xn:SubNetwork id="ONRM_ROOT_MO_R">
<xn:SubNetwork id="RNC0001">
<xn:MeContext id="BLABLA">
</xn:MeContext>
<xn:MeContext id="MACHIN">
</xn:MeContext>
<xn:MeContext id="RNC0001">
<xn:VsDataContainer id="RNC0001">
</xn:VsDataContainer>
<xn:ManagedElement id="1">
<un:RncFunction id="1">
<un:UtranCell id="111111A">
<un:attributes>
<un:uarfcnUl>9800</un:uarfcnUl>
<un:uarfcnDl>10700</un:uarfcnDl>
</un:attributes>
<xn:VsDataContainer id="111111A">
<es:Position>
<es:latitudeSign>1</es:latitudeSign>
<es:latitude>3070727</es:latitude>
<es:longitude>8786820</es:longitude>
</es:Position>
</xn:VsDataContainer>
<xn:VsDataContainer id="1">
</xn:VsDataContainer>
</un:UtranCell>
<un:UtranCell id="111111B">
<un:attributes>
<un:uarfcnUl>9800</un:uarfcnUl>
<un:uarfcnDl>10700</un:uarfcnDl>
</un:attributes>
<xn:VsDataContainer id="111111B">
<es:Position>
<es:latitudeSign>1</es:latitudeSign>
<es:latitude>3070555</es:latitude>
<es:longitude>8786666</es:longitude>
</es:Position>
</xn:VsDataContainer>
<xn:VsDataContainer id="1">
</xn:VsDataContainer>
</un:UtranCell>
</un:RncFunction>
</xn:ManagedElement>
</xn:MeContext>
</xn:SubNetwork>
</xn:SubNetwork>
</configData>
<fileFooter dateTime="2011-11-28T08:38:45Z"/>
</bulkCmConfigDataFile>
到目前为止,我只能够检索按名称给定命名空间第一个元素:
XNamespace xn = "genericNrm.xsd";
XNamespace un = "utranNrm.xsd";
var test1 = xmldoc.Descendants(xn + "MeContext").FirstOrDefault();
这将只给我的第一个元素“MeContext”(在这个例子中,这将使用id = BLABLA返回MeContext)。
如果我尝试以下方法,而不是
XNamespace xn = "genericNrm.xsd";
XNamespace un = "utranNrm.xsd";
var test1 = xmldoc.Descendants(xn + "MeContext");
test1的将是空的......
1 - 我的第一个问题是,我该如何检索使用其“id”属性的特定元素(在本具体的例子我正在寻找id =“RNC0001”)。我尝试了很多东西来自包括以下的计算器:
XNamespace xn = "genericNrm.xsd";
IEnumerable<XElement> utrancells =
xmldoc.Root
.Elements(xn + "MeContext")
.Where(el => (string)el.Attribute("id") == "RNC0001");
它只返回空值。
2 - 第二个问题是如何检索<xn:MeContext id="RNC0001"></xn:MeContext>
中的元素集合? 我想获得集合中的所有<un:UtranCell id="XXXXX"></un:UtranCell>
(和内容),以便我可以从每个集合中提取数据(每个代表不同的实体)。比如我需要检索
<es:latitude>3070555</es:latitude>
<es:longitude>8786666</es:longitude>
从各
<un:UtranCell id="XXXXX"></un:UtranCell>
为此,我试过
(作为测试):
XNamespace un = "utranNrm.xsd";
var test3 = xmldoc.Elements(un + "UtranCell");
var test4 = test1.Elements(un + "UtranCell");
,并再次它只返回空值...
丹尼尔编辑:真实代码是:
public void parseFile()
{
XNamespace xn = "genericNrm.xsd";
XNamespace un = "utranNrm.xsd";
XNamespace cd = "configData.xsd";
var test1 = xmldoc.Descendants(xn + "MeContext").FirstOrDefault();
var test1bis = xmldoc.Descendants(xn + "MeContext");
}
这给了我: TEST1 = <xn:MeContext id="BLABLA" xmlns:xn="genericNrm.xsd"></xn:MeContext>
test1bis = {System.Xml.Linq.XContainer.GetDescendants} | name = null
我不好意思,我忘了提这个。我也尝试了你的建议,并且它在'utranCells'中返回一个空值。 在我的第一个问题,如果我尝试 'VAR TEST1 = xmldoc.Descendants(XN + “MeContext”);'的替代 'VAR TEST1 = xmldoc.Descendants(XN + “MeContext”)FirstOrDefault()。 ' 我也得到一个空值。我会更新我的问题,以反映这 – Yeti 2012-03-08 07:21:27
@Yeti:那不可能。我只是测试它,'xmldoc.Descendants(xn +“MeContext”)'返回3个项目。请显示给你'null'的真实代码。 – 2012-03-08 07:36:13
@DanielHilgarth我在问题的最后添加了真正的代码。 – Yeti 2012-03-08 08:00:03