所以我想在一个看起来像这样的结构中访问子元素:
<asdf:foobar attr="value">
<child>...</child>
</asdf:foobar>
我忘记了调用asdf
的内容,但这是造成问题的原因。我在XLinq中遍历的常规方法不起作用:
xElem child = xDoc.Element("foobar");
将child
设置为null
,因为它声称没有元素foobar
,并且
xElem child = xDoc.Element("asdf:foobar");
不起作用,因为编译器抱怨分号。
感谢所有帮助,并提前感谢!
的
我一直在努力将此作为一个例子(因为我无法向您展示实际代码)。我的测试代码:
Console.WriteLine("BEGIN TEST");
const string MY_SCHEMA = "http://www.example.com/whatever";
XElement xTest =
new XElement("{" + MY_SCHEMA + "}base",
new XAttribute("{" + XML_STANDARD + "}boofar", MY_SCHEMA),
new XAttribute("attr1", "val"),
new XElement("{" + MY_SCHEMA + "}asdf", "ghjkl")
);
result.Text = xTest.ToString();
XElement xOps2 = xTest.Element(XName.Get("asdf", MY_SCHEMA));
XElement xSubOps2;
if (xOps2 == null)
{
MessageBox.Show("Failure.");
}
else
{
xSubOps2 = xOps2.Element(XName.Get("asdf", MY_SCHEMA));
MessageBox.Show(xSubOps2.ToString());
}
Console.WriteLine("END TEST");
MessageBox.Show("END TEST");
这会显示我想要的XML:
<boofar:base xmlns:boofar="http://www.example.com/whatever" attr1="val">
<boofar:asdf>ghjkl</boofar:asdf>
</boofar:base>
一切都很好。谢谢大家!
答案 0 :(得分:2)
不幸的是,从string
到XName
的隐式转换并未解析出命名空间。你需要这样做:
XName.Get("foobar", "asdf");
答案 1 :(得分:1)
另一种处理命名空间的方法是使用XNamespace类。
XNamespace ns = "http://www.example.com/whatever";
XElement child = new XElement(ns + "base");