我一直在搞乱这几个小时,我不确定是什么问题。现在我只是想记录从代理传递给序列的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”来解决此问题。
答案 0 :(得分:1)
expression="count(//xml/rs:data/z:row)"
我可以想到为什么会破坏它的一些事情:
rs:Data
,而不是包含xml
根节点和整个架构的整群因为我不知道你使用的环境,所以让我们以一种独立于命名空间或根元素的方式重写你的表达式:
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"
如果没有,它至少应该指向您实际查看的数据。