繁体   English   中英

通过排除XML中存在的与名称空间相关的属性来读取XML元素值

[英]Read XML element value by excluding namespace related attributes present in the XML

我正在尝试读取XML中存在的元素的值。 如果输入在XML中不包含任何与名称空间相关的属性,则它可以正常工作,如下所示-

string testInputXML = @"
    <FIXML>
        <Header>
        <RequestHeader>
          <MessageKey>
            <RequestUUID>Req_1499940064961</RequestUUID>
            <ServiceRequestId>getLastNTransactionsWithPagination</ServiceRequestId>
            <ServiceRequestVersion>10.2</ServiceRequestVersion>
            <ChannelId>COR</ChannelId>
            <LanguageId></LanguageId>
          </MessageKey>
        </RequestHeader>
      </Header>
     <isLogging>true</isLogging>
    </FIXML>
    ";
                XElement myElement = XElement.Parse(testInputXML);
                Console.WriteLine(myElement.Element("isLogging").Value);

如果输入XML包含任何与名称空间相关的属性,则它将引发异常。

你调用的对象是空的。

string testInputXML = @"
<FIXML xsi:schemaLocation=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://www.w3.org/fixml"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
    <Header>
    <RequestHeader>
      <MessageKey>
        <RequestUUID>Req_1499940064961</RequestUUID>
        <ServiceRequestId>getLastNTransactionsWithPagination</ServiceRequestId>
        <ServiceRequestVersion>10.2</ServiceRequestVersion>
        <ChannelId>COR</ChannelId>
        <LanguageId></LanguageId>
      </MessageKey>
    </RequestHeader>
  </Header>
 <isLogging>true</isLogging>
</FIXML>
";
            XElement myElement = XElement.Parse(testInputXML);
            Console.WriteLine(myElement.Element("isLogging").Value);

在获取元素值时,有什么方法可以排除XML中存在的命名空间?

尝试这个:

Console.WriteLine(myElement.DescendantsAndSelf().Elements().FirstOrDefault(d => d.Name.LocalName == "isLogging")?.Value);

尝试像这样使用XPath:

XDocument xmlDoc = XDocument.Parse(xml);
XElement element = xmlDoc.XPathSelectElement("/*[name()='FIXML']/*[name()='isLogging']");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM