xml - Error when parsing message in Biztalk orchestration - Stack Overflow

I am passing following xml as input message in an orchestration.and trying to extract value of "N

I am passing following xml as input message in an orchestration. and trying to extract value of "Number" field using the following xpath

identifier = xpath(XMsg, "/[local-name()='x' and namespace-uri()='jabber:x:data']/[local-name()='field' and namespace-uri()='jabber:x:data'][@var='Number']/*[local-name()='value' and namespace-uri()='jabber:x:data']");

but it fails with the error:

"There is an error in the xml document" Additional error information: <value xmlns='jabber:x:data'> was not expected.

xml:

<ns0:x xmlns:ns0="jabber:x:data">
    <ns0:field var="Number" label="Number">
        <ns0:value>123456</ns0:value>
    </ns0:field>
    <ns0:field var="ID" label="ID">
        <ns0:value>id1</ns0:value>
    </ns0:field>
    <ns0:field var="Email" label="Email">
        <ns0:value>[email protected]</ns0:value>
    </ns0:field>
    <ns0:field var="Mobile" label="Mobile">
        <ns0:value>07123456789</ns0:value>
    </ns0:field>
    <ns0:field var="Email2" label="Email2">
        <ns0:value>[email protected]</ns0:value>
    </ns0:field>
    <ns0:field var="Status" label="Status">
        <ns0:value>Normal</ns0:value>
    </ns0:field>
    <ns0:field var="Level" label="Status">
        <ns0:value>R</ns0:value>
    </ns0:field>
    <ns0:field var="Country" label="Country">
        <ns0:value/>
    </ns0:field>
</ns0:x>

Here is my schema

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="; xmlns:tns="jabber:x:data" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="jabber:x:data" xmlns:xs=";>
  <xs:element name="x">
    <xs:complexType>
      <xs:sequence minOccurs="0">
        <xs:element maxOccurs="unbounded" name="field">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="value" type="xs:string" />
            </xs:sequence>
            <xs:attribute name="var" type="xs:string" use="required" />
            <xs:attribute name="label" type="xs:string" use="optional" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Can't see anything wrong. Please help me get this resolved. I want to extract value of Number field using the above xpath. Thank you

I am passing following xml as input message in an orchestration. and trying to extract value of "Number" field using the following xpath

identifier = xpath(XMsg, "/[local-name()='x' and namespace-uri()='jabber:x:data']/[local-name()='field' and namespace-uri()='jabber:x:data'][@var='Number']/*[local-name()='value' and namespace-uri()='jabber:x:data']");

but it fails with the error:

"There is an error in the xml document" Additional error information: <value xmlns='jabber:x:data'> was not expected.

xml:

<ns0:x xmlns:ns0="jabber:x:data">
    <ns0:field var="Number" label="Number">
        <ns0:value>123456</ns0:value>
    </ns0:field>
    <ns0:field var="ID" label="ID">
        <ns0:value>id1</ns0:value>
    </ns0:field>
    <ns0:field var="Email" label="Email">
        <ns0:value>[email protected]</ns0:value>
    </ns0:field>
    <ns0:field var="Mobile" label="Mobile">
        <ns0:value>07123456789</ns0:value>
    </ns0:field>
    <ns0:field var="Email2" label="Email2">
        <ns0:value>[email protected]</ns0:value>
    </ns0:field>
    <ns0:field var="Status" label="Status">
        <ns0:value>Normal</ns0:value>
    </ns0:field>
    <ns0:field var="Level" label="Status">
        <ns0:value>R</ns0:value>
    </ns0:field>
    <ns0:field var="Country" label="Country">
        <ns0:value/>
    </ns0:field>
</ns0:x>

Here is my schema

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft/BizTalk/2003" xmlns:tns="jabber:x:data" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="jabber:x:data" xmlns:xs="http://www.w3./2001/XMLSchema">
  <xs:element name="x">
    <xs:complexType>
      <xs:sequence minOccurs="0">
        <xs:element maxOccurs="unbounded" name="field">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="value" type="xs:string" />
            </xs:sequence>
            <xs:attribute name="var" type="xs:string" use="required" />
            <xs:attribute name="label" type="xs:string" use="optional" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Can't see anything wrong. Please help me get this resolved. I want to extract value of Number field using the above xpath. Thank you

Share Improve this question asked Mar 6 at 17:23 manibestmanibest 132 bronze badges 1
  • What is your BizTalk version? – Yitzhak Khabinsky Commented Mar 6 at 18:25
Add a comment  | 

2 Answers 2

Reset to default 1

Please try the following XPath expression:

/*[local-name()='x' and namespace-uri()='jabber:x:data']/*[local-name()='field' and namespace-uri()='jabber:x:data'][@var='Number']/*[local-name()='value' and namespace-uri()='jabber:x:data']/text()

It is better to use a latest version of BizTalk. It is using Saxons' engine that supports XPath 3.1.

No need to deal with namespaces. You can use a wildcard instead:

/*:x/*:field[@var="Number"]/*:value

Because you xml have namespace, change this line:

<xs:element name="value" type="xs:string" />

to:

<xs:element name="value" type="xs:string" form="qualified"/>

The xpath is than:

string value = XDocument.XPathEvaluate("/x[local-name()='x' and namespace-uri()='jabber:x:data']/field[local-name()='field' and namespace-uri()='jabber:x:data' and @var='Number']/value[local-name()='value' and namespace-uri()='jabber:x:data']").ToString();

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744959407a4603397.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信