使用xml中的值进行XPATH查询

时间:2017-06-02 14:38:37

标签: xml xpath

我正在尝试返回与loopcounter值匹配的Filename节点的结果。

我尝试过concat的变种(// Filename [// loopcounter / text()],/ text())

<?xml version="1.0" encoding="UTF-8"?>
<ProcessData>
  <PrimaryDocument SCIObjectID="IDCEDI98:node1:15c5a08563f:2012534"/>
  <Mail_Client>
    <Headers>
      <Attachment_Count>1</Attachment_Count>
    </Headers>
    <Attachments>
      <ContentTypes>
        <Content_Type1>text/plain;
    name="TOYEDI_20170530000003.TXT_14665218_2017May29.TXT"</Content_Type1>
      </ContentTypes>
      <Filenames>
        <Filename1>TOYEDI_20170530000003.TXT_14665218_2017May29.TXT</Filename1>
      </Filenames>
      <FileExtensions>
        <FileExtension1>TXT</FileExtension1>
      </FileExtensions>
    </Attachments>
  </Mail_Client>
  <b2b-raw-message>true</b2b-raw-message>
  <b2b-protocol>smtp</b2b-protocol>
  <loopcounter>1</loopcounter>
  <TINA>
    <MAILBOX>
      <WORKFLOW_ID>5344652</WORKFLOW_ID>
      <TIME_STAMP>2017Jun02</TIME_STAMP>
    </MAILBOX>
  </TINA>
  <DestinationMessageName/>
</ProcessData>

1 个答案:

答案 0 :(得分:0)

你应该可以这样做:

//Filenames/*[local-name()=concat('Filename',/ProcessData/loopcounter)]

此外,如果“文件名”元素没有跳过(例如从Filename1转到Filename3),您应该可以使用position()代替:

//Filenames/*[position() = /ProcessData/loopcounter]