我有一个使用多个名称空间的xml文档:
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://www.oasis-open.org/committees/ebxml-msg/schema/envelope.xsd">
<soap:Header xmlns:eb="http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd"
xsi:schemaLocation="http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd">
<eb:MessageHeader eb:id="ID3305713901556098440508VCPEBV11" eb:version="2.0" soap:mustUnderstand="1">
<eb:Action>Pong</eb:Action>
...这个xml使用了几个名称空间:soap和eb。
如果我事先知道所使用的名称空间,我可以这样做:as suggested in this SO question
XNamespace nsSoap = "http://schemas.xmlsoap.org/soap/envelope/";
XNamespace nsEb = "http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd";
XDocument xDoc = XDocument.Load(textReader);
XElement xmlRoot = xDoc.Root;
XElement header = xmlRoot.Element(nsSoap + "Header");
XElement messageHeader = header.Element(nsEb + "MessageHeader");
XElement action = messageHeader.Element(nsEb + "Action");但是,如果我事先不知道名称空间的位置,该怎么办?
我知道在XElements的开头就提到了它们,所以我猜:我可以向XElement询问它所了解的名称空间吗?
事实上,我可以询问Header关于其名称空间的信息:
var headerNameSpace = header.Name.Namespace;但之后我得到了soap名称空间。如何检测此标头是否定义了eb名称空间?
发布于 2019-05-21 20:38:06
你可以问XElement:你知道"eb“的名称空间吗?
XDocument xDoc = XDocument.Load(textReader);
XElement xmlRoot = xDoc.Root;
// I want the XElement that starts with <soap:header ....
// so I'll ask the XmlRoot if it know a namespace with prefix "soap"
var nsSoap = xmlRoot.GetNameSpaceOfPrefix("soap");
XElement header = xmlRoot.Element(nsSoap + "Header");
// I want to read: <eb:MessageHeader ...
var nsEb = header.GetNameSpaceOfPrefix("eb");
XElement messageHeader = header.Element(nsEb + "MessageHeader");https://stackoverflow.com/questions/56238089
复制相似问题