我是否错过了在wso2esb序列中处理xpath表达式的步骤?

时间:2015-09-19 06:48:10

标签: xpath sequence wso2esb

我一直在搞乱这几个小时,我不确定是什么问题。现在我只是想记录从代理传递给序列的XML文件的xpath表达式的结果。到目前为止,我的表达没有记录任何内容。我已经用几种不同的方式更改了表达式和命名空间,但我无法将信息显示在日志中。我可以看到XML文件完全记录在其中,但不是我试图用xpath提取的数据。当我在插件中运行xpath时,我能够很好地提取数据,所以我不认为这是实际表达式的问题。

有人能把我推向正确的方向吗?我猜这可能是XML格式或命名空间的问题,但我不是100%肯定。

谢谢。

序列

<sequence xmlns="http://ws.apache.org/ns/synapse" name="MySequence">
<log level="custom">
  <property name="sequence" value="MySequence"></property>
</log>
<property xmlns:ns="http://org.apache.synapse/xsd" name="filename" expression="get-property('transport', 'FILE_NAME')"></property>
<log level="custom">
  <property xmlns:ns="http://org.apache.synapse/xsd" name="show-name" expression="get-property('filename')"></property>
  <property xmlns:ns="http://org.apache.synapse/xsd" name="file-name" expression="get-property('targetfilename')"></property>
</log>
<log level="custom">
  <property xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:ns="http://org.apache.synapse/xsd" xmlns:z="RowsetSchema" 
name="sequenceExp" expression="count(//xml/rs:data/z:row)"></property>
</log>
<property xmlns:ns2="http://org.apache.synapse/xsd" 
xmlns:ns="http://org.apache.synapse/xsd" 
name="transport.vfs.ReplyFileName" expression="fn:concat(get-
property('SYSTEM_DATE', 'yyMMddHHmmss'), '-', 
get-property('filename'))" 
    scope="transport"></property>
 <property name="OUT_ONLY" value="true"></property>
 <send>
  <endpoint name="FileEpr">
     <address uri="vfs:file:///var/process/rrout"></address>
  </endpoint>
 </send>
</sequence>

XML输入数据(以架构开头,xml元素的第二个子元素是实际数据)

<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='RowsetSchema'>
<s:schema id='RowsetSchema'>
    <s:elementType name='row' content='eltOnly'>
        <s:attributeType name='iQuizID' rs:number='1' 
    rs:writeunknown='true'>
        <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='iALSQuizNumber' rs:number='2' rs:writeunknown='true'>
        <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='iBookID' rs:number='3' rs:writeunknown='true'>
        <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' 
    rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='vchBookType' rs:number='4' rs:nullable='true' 
    rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='10'/>
    </s:attributeType>
    <s:attributeType name='vchQuizType' rs:number='5' 
    rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='2' 
        rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='vchQuizTypeDesc' rs:number='6' 
    rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='50' 
    rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='tiShowPointsInAR' rs:number='7' 
    rs:writeunknown='true'>
        <s:datatype dt:type='ui1' dt:maxLength='1' rs:precision='3' 
        rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='tiAudioEnabled' rs:number='8' 
    rs:writeunknown='true'>
        <s:datatype dt:type='ui1' dt:maxLength='1' rs:precision='3' 
    rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='tiAudioStatus' rs:number='9' 
    rs:writeunknown='true'>
        <s:datatype dt:type='ui1' dt:maxLength='1' rs:precision='3' 
    rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='chTitlePrefix' rs:number='10' 
    rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='5' 
        rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='vchBookTitle' rs:number='11' 
    rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='255' 
    rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='vchAuthorFirstName' rs:number='12' 
    rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='30' 
    rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='vchAuthorMiddleName' rs:number='13' 
    rs:nullable='true' rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='30'/>
    </s:attributeType>
    <s:attributeType name='vchAuthorLastName' rs:number='14' 
    rs:nullable='true' rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='30'/>
    </s:attributeType>
    <s:attributeType name='vchLanguageCode' rs:number='15' 
    rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='4' 
        rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='vchLanguage' rs:number='16' 
    rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='50' 
    rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='iFiction' rs:number='17' 
    rs:writeunknown='true'>
        <s:datatype dt:type='ui1' dt:maxLength='1' rs:precision='3' 
    rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='vchFiction' rs:number='18' 
    rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='20' 
        rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='tiOutOfPrint' rs:number='19' 
    rs:writeunknown='true'>
        <s:datatype dt:type='ui1' dt:maxLength='1' rs:precision='3' 
    rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='vchOutOfPrint' rs:number='20' 
    rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='20' 
        rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='iReadingLevel' rs:number='21' 
    rs:writeunknown='true'>
        <s:datatype dt:type='float' dt:maxLength='8' rs:precision='15' 
        rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='vchInterestLevel' rs:number='22' 
    rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='10' 
        rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='iARPoints' rs:number='23' 
    rs:writeunknown='true'>
        <s:datatype dt:type='float' dt:maxLength='8' rs:precision='15' 
        rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='flATOS' rs:number='24' rs:nullable='true' 
    rs:writeunknown='true'>
        <s:datatype dt:type='float' dt:maxLength='8' rs:precision='15' 
    rs:fixedlength='true'/>
    </s:attributeType>
    <s:attributeType name='txBookSummary' rs:number='25' 
    rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' 
        dt:maxLength='2147483647' rs:long='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='iWordCount' rs:number='26' 
    rs:writeunknown='true'>
        <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' 
        rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='iNumberQuestions' rs:number='27' 
    rs:writeunknown='true'>
        <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' 
    rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='iQuizStatus' rs:number='28' 
    rs:writeunknown='true'>
        <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' 
    rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='dtOriginalApprovalDate' rs:number='29' 
    rs:nullable='true' rs:writeunknown='true'>
        <s:datatype dt:type='dateTime' rs:dbtype='timestamp' 
        dt:maxLength='16' rs:scale='3' rs:precision='23' 
    rs:fixedlength='true'/>
    </s:attributeType>
    <s:attributeType name='vchDifficultyLevel' rs:number='30' 
    rs:nullable='true' rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='30'/>
    </s:attributeType>
    <s:attributeType name='vchQuizISBN' rs:number='31' 
    rs:nullable='true' rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='25'/>
    </s:attributeType>
    <s:attributeType name='iContentID' rs:number='32' 
    rs:writeunknown='true'>
        <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' 
    rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='tiRecordStatus' rs:number='33' 
    rs:writeunknown='true'>
        <s:datatype dt:type='ui1' dt:maxLength='1' rs:precision='3' 
    rs:fixedlength='true' rs:maybenull='false'/>
    </s:attributeType>
    <s:attributeType name='vchBookTitleContrived' rs:number='34' 
    rs:nullable='true' rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' 
        dt:maxLength='1024'/>
    </s:attributeType>
    <s:attributeType name='vchAuthorContrived' rs:number='35' 
    rs:nullable='true' rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='500'/>
    </s:attributeType>
    <s:attributeType name='vchCountry' rs:number='36' rs:nullable='true' 
    rs:writeunknown='true'>
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='10'/>
    </s:attributeType>
    <s:attributeType name='iSponsor' rs:number='37' rs:nullable='true' 
    rs:writeunknown='true'>
        <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' 
        rs:fixedlength='true'/>
    </s:attributeType>
    <s:attributeType name='dtLastApprovalDate' rs:number='38' 
    rs:nullable='true' rs:writeunknown='true'>
        <s:datatype dt:type='dateTime' rs:dbtype='timestamp' 
        dt:maxLength='16' rs:scale='3' rs:precision='23' 
        rs:fixedlength='true'/>
     </s:attributeType>
    <s:extends type='rs:rowbase'/>
    </s:elementType>
</s:schema>
<rs:data>
<z:row iQuizID='18636' iALSQuizNumber='1' iBookID='3093' vchBookType=' ' 
vchQuizType='RP' vchQuizTypeDesc='Reading Practice'
     tiShowPointsInAR='1' tiAudioEnabled='0' tiAudioStatus='0' 
chTitlePrefix='     ' vchBookTitle='Adam of the Road'
     vchAuthorFirstName='Elizabeth' vchAuthorMiddleName='Janet' 
vchAuthorLastName='Gray' vchLanguageCode='EN' vchLanguage='English'
     iFiction='1' vchFiction='Fiction' tiOutOfPrint='0' 
vchOutOfPrint='In Print' iReadingLevel='6.5' vchInterestLevel='MG'
     iARPoints='9' flATOS='9' txBookSummary='This book describes the 
adventures of eleven-year-old Adam as he travels the open roads of 
thirteenth-century England searching for his missing father, a minstrel, 
and his stolen red spaniel, Nick.'
     iWordCount='57357' iNumberQuestions='10' iQuizStatus='1' 
dtOriginalApprovalDate='1996-04-10T00:00:00' vchDifficultyLevel=' '
     vchQuizISBN=' ' iContentID='118636' tiRecordStatus='1' 
vchCountry='US;CA' dtLastApprovalDate='2000-02-24T00:00:00'/>
<z:row iQuizID='18637' iALSQuizNumber='2' iBookID='3094' vchBookType=' ' 
vchQuizType='RP' vchQuizTypeDesc='Reading Practice'
     tiShowPointsInAR='1' tiAudioEnabled='0' tiAudioStatus='0' 
chTitlePrefix='     ' vchBookTitle='All-of-a-Kind Family'
     vchAuthorFirstName='Sydney' vchAuthorMiddleName='' 
vchAuthorLastName='Taylor' vchLanguageCode='EN' vchLanguage='English'
     iFiction='1' vchFiction='Fiction' tiOutOfPrint='0' 
vchOutOfPrint='In Print' iReadingLevel='4.9000000000000004'
     vchInterestLevel='MG' iARPoints='5' flATOS='5' txBookSummary='Five 
 girls have simple but happy times, with parents rich in kindness but 
 poor in money.'
     iWordCount='32006' iNumberQuestions='10' iQuizStatus='1' 
 dtOriginalApprovalDate='1996-04-10T00:00:00' vchDifficultyLevel=' '
     vchQuizISBN=' ' iContentID='118637' tiRecordStatus='1' 
  vchCountry='US;CA' dtLastApprovalDate='1996-09-19T00:00:00'/>
   </rs:data>
 </xml>

----------编辑 您可以通过将代理中的contentType更改为“application / xml”来解决此问题。

1 个答案:

答案 0 :(得分:1)

expression="count(//xml/rs:data/z:row)"

我可以想到为什么会破坏它的一些事情:

  1. 您没有绑定名称空间,因此无论执行您的表达式,您的配置文件都不知道这些名称空间,除非它&#34;神奇地&#34;了解他们。
  2. 数据&#34;见过&#34;通过该工具可能是实际的rs:Data,而不是包含xml根节点和整个架构的整群
  3. 因为我不知道你使用的环境,所以让我们以一种独立于命名空间或根元素的方式重写你的表达式:

    expression="count(/*//*[local-name(.) = 'data']/*[local-name(.) = 'row'])"
    

    (在根节点之后添加//,以防结构与您显示的不同)如果即使失败,请考虑使用更加荒谬的东西来确保甚至评估XPath:

    expression="concat('Hello world, count words: ', //@iWordCount[1])"
    

    由于属性不在命名空间中,因此应输出iWordCount的第一个值。如果它返回空,您知道您认为具有焦点的文档没有焦点。这是找出前三个元素名称的方法:

    expression="concat('Hello: ', name(/*[1]), name(/*/*[2]), name(/*/*/*[1])"
    

    这应输出:"Hello: xml rs:data z:row"

    如果没有,它至少应该指向您实际查看的数据。