在检索属性值时遇到一些困难。
假设xml看起来像:
<g id="formSide1Main" class="formSideMain">
<g fdtFieldName="Forename1" fdtLorenzoField="lzoFnm">
.....
我正在尝试检索'fdtFieldName'属性的值。 根据其他类似的问题,我试过了:
var svgDocument = XDocument.Parse(rpd.formmodeler);
var firstName = svgDocument.Elements("g")
.Where(x => (string)x.Attribute("fdtLorenzoField") == "lzoFnm").FirstOrDefault();
var attrVal = firstName?.Attribute("fdtFieldName").Value;
但是firstName一直是null。有什么想法吗?
答案 0 :(得分:1)
你可以尝试这样我曾尝试过我能够获得fdtFieldName的值你必须使用属性来获取它的值。如果您放置调试器,您将清楚地了解如何在xml
中获取所需的每个值XmlDocument doc = new XmlDocument();
doc.LoadXml("your xml");
string attr = doc.DocumentElement.Attributes["fdtFieldName"]?.InnerText;
或者你可以像这样检查一下,如果你擅长灵活只是转换它可能会有点冗长
XmlDocument doc = new XmlDocument();
doc.LoadXml(txtQuery.Text);
DisplayNodes(doc.DocumentElement);
private static void DisplayNodes(XmlNode node)
{
//Print attributes of the node
if (node.Attributes != null)
{
XmlAttributeCollection attrs = node.Attributes;
string value = string.Empty;
foreach (XmlAttribute attr in attrs)
{
if (attr.Name == "fdtLorenzoField")
value = attrs["fdtFieldName"]?.InnerText;
Console.WriteLine("Attribute Name: fdtFieldName, Attribute Value = " + value);
}
}
}
答案 1 :(得分:0)
我认为你在寻找:
var firstName = svgDocument.Descendants("g").FirstOrDefault(x =>
x.Attribute("fdtLorenzoField").Value == "lzoFnm");
或者,如果您关心节点的嵌套:
var firstName = svgDocument.Elements("g").FirstOrDefault()?.Elements("g").FirstOrDefault(x =>
x.Attribute("fdtLorenzoField").Value == "lzoFnm");
答案 2 :(得分:0)
最后,我用xml阅读器实现了我的目标:
CFBundleVersion
我不确定这对于大型xml文档是否会有糟糕的表现,但我会看到它是如何发展的。
答案 3 :(得分:-1)
试试这个 svgDocument.root.Elements()