首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个命名空间的XElement读取;检测使用了哪些命名空间

具有多个命名空间的XElement读取;检测使用了哪些命名空间
EN

Stack Overflow用户
提问于 2019-05-21 20:15:59
回答 1查看 58关注 0票数 0

我有一个使用多个名称空间的xml文档:

代码语言:javascript
复制
<?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使用了几个名称空间:soapeb

如果我事先知道所使用的名称空间,我可以这样做:as suggested in this SO question

代码语言:javascript
复制
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关于其名称空间的信息:

代码语言:javascript
复制
var headerNameSpace = header.Name.Namespace;

但之后我得到了soap名称空间。如何检测此标头是否定义了eb名称空间?

EN

回答 1

Stack Overflow用户

发布于 2019-05-21 20:38:06

你可以问XElement:你知道"eb“的名称空间吗?

代码语言:javascript
复制
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");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56238089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档