我試圖在下面的xml代碼中獲得operating-system
屬性的值,但是在我嘗試從堆棧,dotnetcurry和Microsoft獲得的所有解決方案中,我都獲得了一個NullPointerExecption
或它只是沒有返回任何值。C#按屬性名稱獲取Xelement屬性值
這裏是我試圖解析XML數據:
<Report name="Black Workstation" xmlns:cm="http://www.nessus.org/cm">
<ReportHost name="192.168.1.000>
<HostProperties>
<tag name="HOST_END">Wed Jun 29 10:32:54 2016</tag>
<tag name="LastAuthenticatedResults">1467214374</tag>
<tag name="patch-summary-total-cves">5</tag>
<tag name="cpe">cpe:/o:microsoft:windows</tag>
<tag name="operating-system">Microsoft Windows 7 Enterprise Service Pack 1</tag>
</HostProperties>
</ReportHost>
</Report>
我已經試過許多方法,但這裏是最後兩個:
XNamespace ns = "http://www.nessus.org/cm";
var operatingSystem = (findings.Where(a => a.Attribute("name").Value == "operating-system")
.Select(a => a.Value));
var operatingSystem = findings.Descendants().Where(x => x.Attribute("name").Value == ns + "operating-system");
也試過這個解決方案:Use Linq to Xml with Xml namespaces
我在這裏有微軟教程的這個方法,但它只返回true/false,我不能操縱它,因此它分配值Microsoft Windows 7 Enterprise Service Pack 1
到os
變量。
XElement xelement = XElement.Load(s);
IEnumerable<XElement> findings = xelement.Elements();
var hostProperties = from hp in findings.Descendants("HostProperties")
select new
{
os = (string)hp.Element("tag").Attribute("name").Value == "operating-system",
};
我一直利用各種其他的LINQ到XML查詢與where
條款像上面嘗試,但他們都返回Null
或no values to enumerate
。
順便說一句 - 這個問題真的很好。給相關的數據來嘗試一下,你沒有得到什麼,你也試過:)隨着時間的推移:) –