以下のXMLコードでoperating-system
属性の値を取得しようとしていますが、これまでにstack、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>
私は多くの方法を試してみましたが、ここで、最後の2つですしました:
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
ここではMicrosoftチュートリアルのこのメソッドを使用していますが、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",
};
私は、上記のようなwhere
句で様々な他のLINQからXMLへのクエリを使用してみましたが、それらはすべてNull
またはno values to enumerate
を返します。あなたが名前空間を適用する必要はありません、あなたの場合は
を試してみてください - 本当に良い質問のポーズ。それを試すために関連するデータを与えること、あなたが何を得ていないのか、また何を試しているのか:)時間の経過とともに改善されました。 –