我正在尝试获取具有特定值的子元素中的子元素的特定属性的值。
子元素=“文字”和
属性=“ transform”
我正在使用XML.Linq。我查看了一些教程,包括:https://www.dreamincode.net/forums/topic/353127-linq-by-example-5-linq-to-xml-querying/
下面代码中的IEnumerable XElement try1,try2和try3都保持为空。我要返回的值是“ matrix(0.19885 0 -0 0.19885 468.353 9352.33)”
下面是XML和c#代码示例:
SVG文件中的XML:
<svg viewBox="-4773 -7277 42423 24101" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve">
<g clip-path="url(#clipId0)" fill="rgb(100,100,100)" stroke="rgb(100,100,100)" stroke-width="0">
<text transform="matrix(0.19885 0 -0 0.19885 468.353 9352.33)" font-family="Verdana,'sans-serif'" font-size="1.37493">Test1 and other text</text>
<text transform="matrix(0.19885 0 -0 0.19885 567.778 9352.33)" font-family="Verdana,'sans-serif'" font-size="1.37493">Test2 and other text</text>
</g>
</svg>
c#代码:
public string GetAttributeValue()
{
XElement xml_Elem = XElement.Load(_FilePath);
List<string> retVal = new List<string>;
IEnumerable<XElement> try1 =
from el in xml_Elem.Elements("g")
where el.Element("text").Value.Contains("Test1")
select el;
foreach (XElement el in try1)
{
retVal.Add(el.Attribute("transform").ToString());
}
IEnumerable<XElement> try2 =
from el in xml_Elem.Descendants("text")
where el.Value.Contains("Test1")
select el;
foreach (XElement el in try2)
{
retVal.Add(el.Attribute("transform").ToString());
}
IEnumerable<XAttribute> try3 =
from el in xml_Elem.Descendants("text")
where el.Value.Contains("Test1")
select el.Attribute("transforem");
foreach (XAttribute at in try3)
{
retVal.Add(at.Value);
}
return retVal;
}
问题出在命名空间上。请参阅重复的帖子参考。