Как разрешить xpath, когда xmlns определен в корневом элементе - PullRequest
0 голосов
/ 17 октября 2018

Ниже приведен пример XML-файла, из которого я пытаюсь извлечь контент:

<CPM 
  xmlns:nc="http://STUFF1" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:jx="http://STUFF3" 
  xmlns:np="http://STUFF4" 
  xmlns:cj="http://STUFF5" 
  xsi:schemaLocation="http://STUFF6 STUFF7_STUFF8.xsd" 
  version="1.0" 
  key="KEYHERE" 
  xmlns="http://www.STUFF9.com">

  <Header>
    <Init>1234</Init>
    <Dest>MARS</Dest>
    <Control>12345xxx</Control>
  </Header>
  <Body>
  <PM>
    <nc:Msg>
        <np:EDSection>
          <np:EPO>
            <jx:ActivityDate>20180101</jx:ActivityDate>

Я пытаюсь извлечь переменные, используя XPATH, например:

<xsl:stylesheet
    version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:ns0="pri:vate"
    xmlns:nc="http://STUFF1"
    xmlns:np="http://STUFF4"
    xmlns:jx="http://STUFF3"
    xmlns:ea="http://OTHERSTUFF"
    xpath-default-namespace="http://www.STUFF9.com">

    <xsl:variable name="MYDATE" select="/CPM/Body[1]/PM[1]/nc:Msg[1]/np:EDSection[1]/np:EPO[1]/jx:ActivityDate[1]"/>

Проблема в том, что у меня есть Java-компонент, которому не нравится "xpath-default-namespace", и я предпочел бы изменить xslt, чем изменить Java-компонент.Есть ли другой способ разрешить xpath из исходного xml, который определяет xmlns с URL-адресом в корневом элементе, как этот?

1 Ответ

0 голосов
/ 17 октября 2018

Замените xpath-default-namespace="http://www.STUFF9.com" на xmlns:s9="http://www.STUFF9.com" и измените выражение XPath на

/s9:CPM/s9:Body[1]/s9:PM[1]/nc:Msg[1]/np:EDSection[1]/np:EPO[1]/jx:ActivityDate[1]

После удаления пространства имен по умолчанию вы должны определить явное пространство имен.Здесь я выбрал s9 для этого случая, но подойдет любой действительный QName.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...