我正在尝试使用以下XML(对于第三方;因此需要确切)并且在内部元素上使用xmlns时遇到一些问题:
<headerResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<sessionID xmlns="http://www.example.com/portal-api">4654654564</sessionID>
<uniqueTranID xmlns="http://www.example.com/portal-api">gh0000000</uniqueTranID>
<statusCode xmlns="http://www.example.com/portal-api">1</statusCode>
<statusCodeDescription xmlns="http://www.example.com/portal-api">jhkjhkjhkjhkjkjhkjkkjhkhk</statusCodeDescription>
<message xmlns="http://www.example.com/portal-api">testMessage</message>
</headerResponse>
从其他例子来看,我有以下几点:
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
XNamespace xsd = "http://www.w3.org/2001/XMLSchema";
XNamespace api = "http://www.example.com/portal-api";
XElement example = new XElement("headerResponse",
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(XNamespace.Xmlns + "xsd", xsd),
new XElement("sessionID", "some session id", new XAttribute("xmlns", api))
);
没有sessionID,它很高兴用xsi和xsd创建了主headerResponse,但是当我添加sessionID并尝试使用example.toString()在即时窗口中发布内容时,我收到以下错误:< / p>
The prefix '' cannot be redefined from '' to 'http://www.example.com/portal-api' within the same start element tag.
答案 0 :(得分:3)
您需要使用其完全限定名称(即包括其名称空间)定义元素名称XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
XNamespace xsd = "http://www.w3.org/2001/XMLSchema";
XNamespace api = "http://www.example.com/portal-api";
XElement example = new XElement("headerResponse",
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(XNamespace.Xmlns + "xsd", xsd),
new XElement(api + "sessionID", "some session id")
);
。 LINQ to XML将自动处理默认名称空间声明的插入:
api
您可以通过添加它们来控制声明,就像您已经完成的那样。例如,您可以为XElement example = new XElement("headerResponse",
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(XNamespace.Xmlns + "xsd", xsd),
new XAttribute(XNamespace.Xmlns + "api", api),
new XElement(api + "sessionID", "some session id")
);
添加一个带有前缀的声明,以简化结果:
foreach($array as $k => $v ) {
if ($v['field_id'] ==104) {
$value = $v['meta_value'];
}
}
请注意,尽管XML看起来与您所需的XML不同,但它们之间在语义上没有区别。