【问题标题】:Reading Element Value from xml message with multiple namespaces从具有多个命名空间的 xml 消息中读取元素值
【发布时间】:2014-02-17 22:50:44
【问题描述】:

我对 Linq to XML 非常陌生。我正在尝试在此消息中获取 MSGID 节点的元素值:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Header>
        <nsah:AuditHeader xmlns:nsah="http://schemas.rnab.nl/giraal/AuditHeader/1.0">
            <To>mq://rifb/accounting/AP</To>
            <RelatesTo>mq://rnab/giraal/PE/BookingStatusAPS/01</RelatesTo>
            <Action>mq://rifb/accounting/AP/BookingService/01</Action>
            <From>mq://rnab/giraal/PE</From>
        </nsah:AuditHeader>
    </soapenv:Header>
    <soapenv:Body>
        <ns5:CREATEPMNT_FSFS_REQ xsi:schemaLocation="http://fcubs.ofss.com/service/FCUBSCPGServices CommPmntGtwyCreate-Req-Full.xsd" xmlns:ns5="http://fcubs.ofss.com/service/FCUBSCPGServices">
            <ns5:FCUBS_HEADER>
                <ns5:SOURCE>SOURCE</ns5:SOURCE>
                <ns5:UBSCOMP>FCUBS</ns5:UBSCOMP>
                <ns5:MSGID>MsgiD01236549876546351321</ns5:MSGID>
                <ns5:USERID>UId</ns5:USERID>
                <ns5:BRANCH>BRANCH</ns5:BRANCH>
                <ns5:MODULEID>MId</ns5:MODULEID>
                <ns5:SERVICE>SERVICE</ns5:SERVICE>
                <ns5:OPERATION>Operation</ns5:OPERATION>
                <ns5:DESTINATION>Destination</ns5:DESTINATION>
            </ns5:FCUBS_HEADER>
            <ns5:FCUBS_BODY>
                <ns5:PmntDETAILS>
                    <ns5:XREF>XREF321654987</ns5:XREF>
                    <ns5:AMOUNT>0.09000</ns5:AMOUNT>
                    <ns5:VALUE_DATE>2012-12-20</ns5:VALUE_DATE>
                    <ns5:CCY>EUR</ns5:CCY>
                    <ns5:CUST_AC_NO>123456789</ns5:CUST_AC_NO>
                    <ns5:CPTY_AC_NO>987654321</ns5:CPTY_AC_NO>      
                </ns5:PmntDETAILS>
            </ns5:FCUBS_BODY>
        </ns5:CREATEPMNT_FSFS_REQ>
    </soapenv:Body>
</soapenv:Envelope>

这是我目前拥有的:

Dim XDoc As XDocument = XDocument.Load(Variable_Echo.OpenedFile)
Dim XNs_soapenv As XNamespace = "http://schemas.xmlsoap.org/soap/envelope/"
Dim XNs_ns5 = "http://fcubs.ofss.com/service/FCUBSCPGServices"
Dim Body = XDoc.Descendants(XNs_soapenv + "Body")
Dim MsgId = Body.Descendants(XNs_ns5 + "MSGID")

当我调试我的代码时,我在 MsgId = "Additional information: The ':' 字符,十六进制值 0x3A,不能包含在名称中。"

非常感谢您的帮助

【问题讨论】:

    标签: xml vb.net linq


    【解决方案1】:

    您将XNs_ns5 隐式声明为字符串。因此:XNs_ns5 + "MSGID" 表示表示元素名称而不是前缀 + 元素名称的连接字符串。因为元素名称不应包含冒号 (:),所以该表达式将触发错误。将XNs_ns5 的声明更改为XNamespace 类型,错误将出现:

    Dim XNs_ns5 As XNamespace = "http://fcubs.ofss.com/service/FCUBSCPGServices"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      • 2015-01-30
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多