我有我需要以提取參數解析以下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