主頁 > 後端開發 > 命名空間元素的正確XPath?

命名空間元素的正確XPath?

2022-11-02 08:14:59 後端開發

我正在尋找 XPath 來獲取 ad:pd 元素的值。我已經嘗試了 XPath 中所有可能的方法來獲取值,但沒有一種方法起作用。

<?xml version="1.0" encoding="UTF-8"?>
<ad:sgRes
    xmlns:ad="http://www.thehtf.co.uk/Data/V1.0">
    <ad:Msg>
        <ad:cpn>
            <ad:ist>
                <ad:tm>
                    <ad:pd>12016</ad:pd>
                </ad:tm>
            </ad:ist>
        </ad:cpn>
    </ad:Msg>
</ad:sgRes>

我使用的 XPATH 是://pd //*:pd ad:sgRes/ad:Msg/ad:cpn/ad:ist/ad:tm/ad:pd //ad:tm/*:pd但它們都不起作用。也嘗試使用exclude-result-prefixes="ad"沒有成功。我在這里瀏覽了幾篇文章,但都沒有奏效。這就是為什么在這里發布我的問題。對于你們來說,這可能是一件很容易回答的事情。但我肯定在這里遺漏了一些東西。

在此處添加我的 XSLT 代碼。評論中提到的解決方案都不適合我。我在這里錯過了什么:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:ad="http://www.thehtf.co.uk/Data/V1.0" 
  xmlns:dp="http://www.datapower.com/extensions" 
  xmlns:func="http://exslt.org/functions" 
  xmlns:apim="http://www.ibm.com/apimanagement"
extension-element-prefixes="dp func apim ad" exclude-result-prefixes="dp">

  <xsl:import href="local:///isp/policy/apim.custom.xsl"/>

  <xsl:template match="/">
    <xsl:variable name="payload" select="apim:getVariable('Output.body')" />
    <xsl:variable name="pdCode" select="$payload//*[local-name()='pd']"/>
     </xsl:variable>

    <xsl:choose>
      
       <xsl:when test="$pdCode='66'">
        <xsl:call-template name="apim:setVariable">
          <xsl:with-param name="varName" select="'Check'"/>
          <xsl:with-param name="value" select="'True'"/>
        </xsl:call-template>
      </xsl:when>
      
      <xsl:when test="$pdCode='31'">
        <xsl:call-template name="apim:setVariable">
          <xsl:with-param name="varName" select="'Check'"/>
          <xsl:with-param name="value" select="'False'"/>
        </xsl:call-template>
      </xsl:when>

      <xsl:otherwise>
        <xsl:call-template name="apim:setVariable">
          <xsl:with-param name="varName" select="'Check'"/>
          <xsl:with-param name="value" select="'UnknownError'"/>
        </xsl:call-template>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>

apim.custom.xsl

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:dp="http://www.datapower.com/extensions"
  xmlns:func="http://exslt.org/functions"
  xmlns:apim="http://www.ibm.com/apimanagement"
  xmlns:webapi="http://www.ibm.com/apimanagement"
  xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx"
  extension-element-prefixes="dp func"
  exclude-result-prefixes="dp func apim webapi json">

  <xsl:import href="local:///isp/error_template.xsl" dp:ignore-multiple="yes"/>
  <xsl:import href="apim.context.xsl" dp:ignore-multiple="yes" />
  <xsl:import href="assembly-util.xsl" dp:ignore-multiple="yes" />
  <xsl:include href="apim.setvariable-impl.xsl" dp:ignore-multiple="yes"/>


  <!--
   ============================================================================================
   ============================================================================================
   -->

  <func:function name="apim:payloadRead">
    <xsl:variable name="gscript" select="'local:///isp/policy/apim.custom.xsl.js'"/>
    <xsl:variable name="input-media" select="dp:variable('var://context/_apimgmt/content-type')" />
    <xsl:variable name="polic-media" select="dp:variable('var://context/_apimgmt/policy-output-mediaType')" />
    <xsl:variable name="usePolicyOutput" select="dp:variable('var://context/_apimgmt/use-policy-output')"/>

    <xsl:if test="$debug1">
      <xsl:message dp:priority="debug">
        <xsl:text>apim:payloadRead: [</xsl:text>
        <xsl:value-of select="$input-media"/>
        <xsl:text>][</xsl:text>
        <xsl:value-of select="$polic-media"/>
        <xsl:text>][</xsl:text>
        <xsl:value-of select="$usePolicyOutput"/>
        <xsl:text>]</xsl:text>
      </xsl:message>
    </xsl:if>
    <!-- -->
    <!-- -->
    <xsl:choose>
      <xsl:when test="webapi:isContentJSON($polic-media) = 'y' or (webapi:isContentJSON($input-media) = 'y' and webapi:isContentXML($polic-media) = 'n')">
        <xsl:variable name="params">
          <parameter name="action">readInputAsJSONX</parameter>
        </xsl:variable>
        <xsl:variable name="result" select="dp:gatewayscript($gscript, ., true(), $params)"/>
        <xsl:variable name="jsonx1" select="$result/gatewayscript/result/text()"/>
        <func:result>
          <xsl:choose>
            <xsl:when test="string-length($jsonx1) &gt; 0">
              <dp:parse select="$jsonx1"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:copy-of select="/.."/>
            </xsl:otherwise>
          </xsl:choose>
        </func:result>
      </xsl:when>
      <!--@@ XML Payload from 'policy-output' -->
      <xsl:when test="webapi:isContentXML($polic-media) = 'y' and $usePolicyOutput = 'true'">
        <func:result>
          <xsl:copy-of select="dp:variable('var://context/policy-output')" />
        </func:result>
      </xsl:when>
      <!--@@ XML Payload from 'INPUT' - first time reading it -->
      <xsl:when test="webapi:isContentXML($input-media) = 'y'">
         <!-- If the original input media is specified, set the output media as that value. This will ensure
         that the policy does not change the content type from text/xml to application/xml for example. If it
         is not specified (the original content type is the name of the variable or is empty, it will default to
         input-media (i.e. application/xml). -->
         <xsl:variable name="original-input-media">
           <xsl:choose>
             <xsl:when test="dp:responding() = true()">
               <xsl:variable name="temp" select="normalize-space(dp:variable('var://service/original-response-content-type'))" />
               <xsl:choose>
                 <xsl:when test="not($temp = 'var://service/original-response-content-type')">
                   <xsl:value-of select="$temp" />
                 </xsl:when>
                 <xsl:otherwise>
                   <xsl:value-of select="/.." />
                 </xsl:otherwise>
               </xsl:choose>
             </xsl:when>
             <xsl:otherwise>
               <xsl:variable name="temp" select="normalize-space(dp:variable('var://service/original-content-type'))" />
               <xsl:choose>
                 <xsl:when test="not($temp = 'var://service/original-content-type')">
                   <xsl:value-of select="$temp" />
                 </xsl:when>
                 <xsl:otherwise>
                   <xsl:value-of select="/.." />
                 </xsl:otherwise>
               </xsl:choose>
             </xsl:otherwise>
           </xsl:choose>
         </xsl:variable>
         <xsl:choose>
           <xsl:when test="string($original-input-media)">
             <dp:set-variable name="'var://context/_apimgmt/policy-output-mediaType'" value="string($original-input-media)" />
           </xsl:when>
           <xsl:otherwise>
             <dp:set-variable name="'var://context/_apimgmt/policy-output-mediaType'" value="string($input-media)" />
           </xsl:otherwise>
         </xsl:choose>

         <func:result>
           <xsl:copy-of select="dp:variable('var://context/INPUT')" />
         </func:result>
      </xsl:when>
      <!-- -->
      <xsl:otherwise>
      </xsl:otherwise>
    </xsl:choose>
  </func:function>

  <!--
   ============================================================================================
   ============================================================================================
   -->

  <xsl:template name="apim:output">
    <xsl:param name="mediaType" select="''" />

   <xsl:if test="$mediaType != ''">
     <dp:set-variable name="'var://context/_apimgmt/policy-output-mediaType'" value="string($mediaType)" />
   </xsl:if>

   <dp:set-variable name="'var://context/_apimgmt/policy-output-set'" value="'true'"/>
   <dp:set-variable name="'var://context/_apimgmt/content-type-override'" value="''"/>
  </xsl:template>

  <!--
   ============================================================================================
   ============================================================================================
   -->
  <func:function name="apim:payloadType">
   <func:result>
     <xsl:value-of select="dp:variable('var://context/_apimgmt/policy-output-mediaType')" />
   </func:result>
  </func:function>


  <!--
   ============================================================================================
   ============================================================================================
   -->

  <func:function name="apim:policyProperties">
    <xsl:variable name="policy-props" select="webapi:getPolicyDoc()"/>
    <xsl:variable name="processed">
      <xsl:choose>
        <xsl:when test="$policy-props/policy/properties[@array = 'true']">
          <xsl:copy-of select="$policy-props/policy/properties"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:apply-templates select="$policy-props/policy/properties" mode="policyproperties"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <func:result>
      <xsl:copy-of select="$processed"/>
    </func:result>

  </func:function>

  <xsl:template match="properties[@name]" mode="policyproperties">
    <xsl:choose>
      <!-- if we have an array, must handle each child array element
           that will have a @name of 0, 1 ... n -->
      <xsl:when test="@array = 'true'">
        <xsl:variable name="arrayName" select="@name" />
        <xsl:for-each select="./properties | ./property">
          <xsl:element name="{$arrayName}">
            <xsl:apply-templates select="@* | node()" mode="policyproperties"/>
          </xsl:element>
        </xsl:for-each>
      </xsl:when>
      <xsl:otherwise>
        <xsl:element name="{@name}">
          <xsl:value-of select="text()"/>
          <xsl:apply-templates select="@* | node()" mode="policyproperties"/>
        </xsl:element>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="properties" mode="policyproperties">
       <xsl:apply-templates select="@* | node()" mode="policyproperties"/>
  </xsl:template>

  <xsl:template match="property" mode="policyproperties">

    <xsl:choose>
      <xsl:when test="@name = 'scopes'">
        <xsl:element name="scopes">
          <xsl:choose>
            <xsl:when test="@type = 'string'">
              <xsl:choose>
                <xsl:when test="string-length(.) &gt; 0">
                  <xsl:copy-of select="dp:parse(.)"/>
                </xsl:when>
                <xsl:otherwise>
                  <xsl:copy-of select="/.."/>
                </xsl:otherwise>
              </xsl:choose>
            </xsl:when>
            <xsl:otherwise>
              <xsl:copy-of select=".//set"/>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:element>
      </xsl:when>
      <xsl:when test="starts-with(@name, 'scopes.')">
        <xsl:element name="scope">
          <xsl:attribute name="original"><xsl:value-of select="@name"/></xsl:attribute>
          <xsl:attribute name="desc"><xsl:value-of select="text()"/></xsl:attribute>
          <xsl:value-of select="substring-after(@name, 'scopes.')"/>
        </xsl:element>
      </xsl:when>
      <xsl:otherwise>
        <xsl:element name="{@name}">
          <xsl:value-of select="text()"/>
        </xsl:element>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="@* | node()" mode="policyproperties">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" mode="policyproperties"/>
    </xsl:copy>
  </xsl:template>



  <!--
   ============================================================================================
   ============================================================================================
   -->

  <!-- deprecated -->
  <func:function name="apim:readContext">
    <func:result>
      <xsl:call-template name="buildContext" />
    </func:result>
  </func:function>

  <func:function name="apim:getContext">
    <xsl:param name="var" />
    <func:result>
      <xsl:value-of select="apim:getContextByVariable($var)" />
    </func:result>
  </func:function>


  <!--
   ============================================================================================
   ============================================================================================
   -->

  <xsl:template name="apim:error">
    <xsl:param name="httpCode" />
    <xsl:param name="httpReasonPhrase" />
    <xsl:param name="errorName" select="'runtime.error'"/>
    <xsl:param name="errorMessage" select="''"/>
    <xsl:param name="ignorecatch" select="'false'"/>

    <xsl:call-template name="error">
      <xsl:with-param name="name" select="$errorName"/>
      <xsl:with-param name="code"   select="$httpCode"/>
      <xsl:with-param name="reason" select="$httpReasonPhrase"/>
      <xsl:with-param name="message" select="$errorMessage"/>
      <xsl:with-param name="ignorecatch" select="$ignorecatch"/>
    </xsl:call-template>
  </xsl:template>

  <!--
  ============================================================================================
  Function to return the exception JSON object as XML so customers don't need to pull the
  context variable directly.
  ============================================================================================
  -->
  <func:function name="apim:getError">

    <xsl:variable name="exception" select="dp:variable('var://context/policy/fw/exception')" />
    <xsl:variable name="result" select="dp:stringToJSONx($exception)"/>
    <func:result>
      <error>
        <name><xsl:value-of select="$result/json:object/*[@name='name']"/></name>
        <message><xsl:value-of select="$result/json:object/*[@name='message']"/></message>
        <policyTitle><xsl:value-of select="$result/json:object/*[@name='policyTitle']"/></policyTitle>
        <status>
          <code><xsl:value-of select="$result/json:object/*[@name='httpCode']"/></code>
          <reason><xsl:value-of select="$result/json:object/*[@name='httpReasonPhrase']"/></reason>
        </status>
      </error>
    </func:result>
  </func:function>

  <!--
  ============================================================================================
  Gateway properties can be set in local:///ext/gateway-properties.xml overridden by an
  API property of the same name.
   - Values must be a string type.
  ============================================================================================
  -->

  <func:function name="apim:getGatewayProperty">
    <xsl:param name="propertyName"/>

    <xsl:variable name="apiProp" select="apim:getApiPropertyValue($propertyName)" />
    <xsl:variable name="result">
      <xsl:choose>
        <xsl:when test="string-length($apiProp) > 0">
           <xsl:value-of select="$apiProp"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:variable name="domain" select="dp:variable('var://service/domain-name')" />
          <xsl:variable name="extVar" select="concat('var://system/_apimgmt/', $domain,'/dpext')" />
          <xsl:value-of select="dp:variable($extVar)//property[@name=$propertyName]"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <func:result>
      <xsl:value-of select="string($result)" />
    </func:result>
  </func:function>

  <!--
  ============================================================================================
  ============================================================================================
  -->

  <func:function name="apim:getApiProperty">
    <xsl:param name="propertyName"/>
    <func:result>
      <xsl:value-of select="apim:getApiPropertyValue($propertyName)" />
    </func:result>
  </func:function>

  <!--
  ============================================================================================
  ============================================================================================
  -->

  <func:function name="apim:getApiProperties">
    <xsl:variable name="policiesXml" select="dp:variable('var://context/policy/fw/input-map')" />
    <xsl:variable name="configProperties">
      <xsl:for-each select="$policiesXml/policies/cfgProperty">
        <xsl:element name="{@name}">
          <xsl:value-of select="apim:getApiPropertyValue(@name,$policiesXml)" />
        </xsl:element>
      </xsl:for-each>
    </xsl:variable>
    <func:result>
      <xsl:copy-of select="$configProperties" />
    </func:result>
  </func:function>


  <!-- ======================================================================= -->
  <xsl:template name="apim:payloadReadOrigin" >
    <xsl:param name="input-media" select="dp:variable('var://context/_apimgmt/content-type')" />
    <xsl:variable name="ruletype" select="dp:variable('var://service/transaction-rule-type')" />
    <xsl:choose>
      <xsl:when test="$input-media = 'application/xml'">
        <xsl:copy-of select="dp:variable('var://context/INPUT')" />
      </xsl:when>
      <xsl:when test="$ruletype = 'request' and $input-media = 'application/json'">
        <xsl:copy-of select="dp:variable('var://context/__JSONASJSONX')" />
      </xsl:when>
      <xsl:when test="$input-media = 'application/json'">
        <xsl:copy-of select="dp:variable('var://context/__JSONASJSONX2')" />
      </xsl:when>
      <xsl:otherwise/>
    </xsl:choose>
  </xsl:template>

  <!-- ======================================================================= -->
  <xsl:template name="apim:setVariable">
    <xsl:param name="varName"/>
    <xsl:param name="value"/>
    <xsl:param name="action" select="'Set'" />

    <xsl:call-template name="apim:setVariableImpl">
      <xsl:with-param name="rawName" select="$varName" />
      <xsl:with-param name="rawValue" select="$value" />
      <xsl:with-param name="action" select="$action" />
    </xsl:call-template>
  </xsl:template>

  <!-- ======================================================================= -->
  <func:function name="apim:getVariable">
    <xsl:param name="varName" />
    <xsl:param name="decode" />
    <xsl:param name="encodePlus" select="'false'"/>

    <func:result select="apim:getVariableImpl($varName, $decode, $encodePlus)" />
  </func:function>

  <!--
   ============================================================================================
   ============================================================================================
   -->

  <func:function name="apim:getRegistry">
    <xsl:param name="name"/>
    <xsl:variable name="servicesXml" select="dp:variable('var://context/_apimgmt/tenant-policy')"/>
    <xsl:variable name="result" select="$servicesXml/registries/ldap[@name = $name]"/>
    <xsl:if test="not($result) and $debug1">
      <xsl:message dp:type="apiconnect" dp:priority="debug">
        <xsl:text>apim:getRegistry(</xsl:text>
        <xsl:value-of select="$name"/>
        <xsl:text>) not found. Known names are: </xsl:text>
        <xsl:for-each select="$servicesXml/registries/ldap">
          <xsl:value-of select="@name"/>
          <xsl:text> </xsl:text>
        </xsl:for-each>
      </xsl:message>
    </xsl:if>
    <func:result>
      <xsl:copy-of select="$result"/>
    </func:result>
  </func:function>


    <!-- ======================================================================= -->
  <func:function name="apim:getTLSProfileObjName">
    <xsl:param name="inputName" />

    <xsl:variable name="params">
      <parameter name="funcName">getTLSProfileObjName</parameter>
      <parameter name="args"><xsl:value-of select="string($inputName)"/></parameter>
    </xsl:variable>

    <func:result>
      <xsl:copy-of select="dp:gatewayscript('local:///isp/policy/xslt-to-js-bridge.js', $params, false())"/>
    </func:result>
  </func:function>

    <!-- ======================================================================= -->
  <func:function name="apim:getManagedObject">
    <xsl:param name="type" /> <!-- Required -->
    <xsl:param name="name" />
<!--    <xsl:param name="version" /> -->
    <xsl:param name="property" />
    <xsl:param name="asFilename" select="'false'"/>
<!--    <xsl:param name="id" /> -->


    <xsl:variable name="params">
      <parameter name="funcName">getManagedObject</parameter>
      <parameter name="args">
          <xsl:text>[{"name":"</xsl:text>
          <xsl:value-of select="string($name)"/>
<!--
          <xsl:text>","version":"</xsl:text>
          <xsl:value-of select="string($version)"/>
          <xsl:text>","id":"</xsl:text>
          <xsl:value-of select="string($id)"/>
-->
          <xsl:text>","property":"</xsl:text>
          <xsl:value-of select="string($property)"/>
          <xsl:text>","asFilename":"</xsl:text>
          <xsl:value-of select="string($asFilename)"/>
          <xsl:text>"},"</xsl:text>
          <xsl:value-of select="string($type)"/>
          <xsl:text>"]</xsl:text>
      </parameter>
    </xsl:variable>

    <func:result>
      <xsl:copy-of select="dp:gatewayscript('local:///isp/policy/xslt-to-js-bridge.js', $params, false())"/>
    </func:result>
  </func:function>


    <!-- ======================================================================= -->
  <func:function name="apim:getManagedObjectName">
    <xsl:param name="type" /> <!-- Required -->
    <xsl:param name="name" />

    <xsl:variable name="params">
      <parameter name="funcName">getManagedObjectName</parameter>
      <parameter name="args">
          <xsl:text>[{"name":"</xsl:text>
          <xsl:value-of select="string($name)"/>
          <xsl:text>","asObject": "</xsl:text>
          <xsl:text>true</xsl:text>
          <xsl:text>"},"</xsl:text>
          <xsl:value-of select="string($type)"/>
          <xsl:text>"]</xsl:text>
      </parameter>
    </xsl:variable>

    <func:result>
      <xsl:copy-of select="dp:gatewayscript('local:///isp/policy/xslt-to-js-bridge.js', $params, false())"/>
    </func:result>
  </func:function>

  <func:function name="apim:determineMediaType">

    <xsl:variable name="mediaType">

     <!-- If the original input media is specified, set the output media as that value. This will ensure
     that the policy does not change the content type from text/xml to application/xml for example. If it
     is not specified (the original content type is the name of the variable or is empty, it will default to
     input-media (i.e. application/xml). -->
      <xsl:variable name="originalContentType">
         <xsl:choose>
           <xsl:when test="dp:responding() = true()">
             <xsl:variable name="temp" select="normalize-space(dp:variable('var://service/original-response-content-type'))" />
             <xsl:choose>
               <xsl:when test="not($temp = 'var://service/original-response-content-type')">
                 <xsl:value-of select="$temp" />
               </xsl:when>
               <xsl:otherwise>
                 <xsl:value-of select="/.." />
               </xsl:otherwise>
             </xsl:choose>
           </xsl:when>
           <xsl:otherwise>
             <xsl:variable name="temp" select="normalize-space(dp:variable('var://service/original-content-type'))" />
             <xsl:choose>
               <xsl:when test="not($temp = 'var://service/original-content-type')">
                 <xsl:value-of select="$temp" />
               </xsl:when>
               <xsl:otherwise>
                 <xsl:value-of select="/.." />
               </xsl:otherwise>
             </xsl:choose>
           </xsl:otherwise>
         </xsl:choose>
      </xsl:variable>
      <xsl:variable name="usePolicyOutput" select="dp:variable('var://context/_apimgmt/use-policy-output')"/>
      <xsl:variable name="policyOutputMediaType" select="dp:variable('var://context/_apimgmt/policy-output-mediaType')"/>
      <xsl:variable name="content-type-override" select="dp:variable('var://context/_apimgmt/content-type-override')"/>

      <xsl:choose>
        <xsl:when test="string-length($content-type-override) &gt; 0">
          <xsl:value-of select="$content-type-override"/>
        </xsl:when>
        <xsl:when test="string-length($usePolicyOutput) &gt; 0 and string-length($policyOutputMediaType) &gt; 0">
          <xsl:value-of select="$policyOutputMediaType"/>
        </xsl:when>
        <xsl:when test="$originalContentType">
          <xsl:value-of select="$originalContentType"/>
        </xsl:when>
      </xsl:choose>
    </xsl:variable>

    <func:result>
      <xsl:value-of select="string($mediaType)"/>
    </func:result>
  </func:function>

</xsl:stylesheet>

uj5u.com熱心網友回復:

給定已發布的 XML,并假設您已在 XSLT ( xmlns:ad="http://www.thehtf.co.uk/Data/V1.0") 這個 XPath 中類似地宣告了命名空間前綴,

//ad:pd

將選擇命名空間pd中檔案中的所有元素http://www.thehtf.co.uk/Data/V1.0


你的一個例子,

ad:sgRes/ad:Msg/ad:cpn/ad:ist/ad:tm/ad:pd

如果當前節點是根節點,將會作業。將 XPath 從相對 XPath 更改為絕對 XPath 以消除依賴性:

/ad:sgRes/ad:Msg/ad:cpn/ad:ist/ad:tm/ad:pd

你的另一個 XPath,

//*:pd

本來可以在 XPath 2.0 及更高版本中作業。


也可以看看

  • XSLT/XPath 中的當前節點與背景關系節點?
  • XPath 如何處理 XML 名稱空間?

uj5u.com熱心網友回復:

你有沒有試過這個:

//*[local-name()='pd']

但最好使用

//ad:pd

很簡單。

謝謝你的評論

uj5u.com熱心網友回復:

我通過使用 XSL 將其排序,以在所有命名空間到達我的原始 XSL 之前洗掉它。XPATH//pd有效。

我用來洗掉命名空間的代碼是:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output indent="yes" method="xml" encoding="utf-8" omit-xml-declaration="yes"/>

<!-- Stylesheet to remove all namespaces from a document -->

<!-- template to copy elements -->
<xsl:template match="*">
    <xsl:element name="{local-name()}">
        <xsl:apply-templates select="@* | node()"/>
    </xsl:element>
</xsl:template>

<!-- template to copy attributes -->
<xsl:template match="@*">
    <xsl:attribute name="{local-name()}">
        <xsl:value-of select="."/>
    </xsl:attribute>
</xsl:template>

<!-- template to copy the rest of the nodes -->
<xsl:template match="comment() | text() | processing-instruction()">
    <xsl:copy-of select="."/>
</xsl:template>

</xsl:樣式表>

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/525013.html

標籤:xml路径xslt

上一篇:WireMock:如何根據XML中的一個欄位選擇特定檔案

下一篇:cvc-elt.1.a:找不到元素“核心:配置”的宣告

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more