2011-02-23 101 views
2

我想从XML文件中删除XML元素。我想要移除的标记被命名为xfdf:field。 如何在我的xslt中指定此项?我试过这个,我得到一个错误说“org.apache.xpath.domapi.XPathStylesheetDOM3Exception:前缀必须解析为名称空间:xfdf”。删除名称类似xfdf:的字段(带名称空间)的XML标记

这是我的xslt。

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" /> 
    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*" /> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="xfdf:field"></xsl:template> 
</xsl:stylesheet> 

这是我的xml。

<xfa:datasets 
xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" 
xmlns:dd="http://ns.adobe.com/data-description/" xmlns:tns="http://hostname" 
xmlns:xfdf="http://ns.adobe.com/xfdf/"> 
    <xfa:data> 
     <tns:form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
      <tns:formHeader> 
       <tns:formId>formid</tns:formId> 
       <tns:revId>Rev123</tns:revId> 
       <tns:agencyId>agency</tns:agencyId> 
       <tns:progId>program</tns:progId> 
       <tns:serviceId>service</tns:serviceId> 
      </tns:formHeader> 
      <tns:formFields> 
       <tns:date>08-13-1967</tns:date> 
       <tns:agreementBetween></tns:agreementBetween> 
       <tns:ncr>xxxx</tns:ncr> 
       <tns:formConfirmationInfo> 
        <tns:confNbrLbl>nbrlabel</tns:confNbrLbl> 
        <tns:confNbrData>1231</tns:confNbrData> 
        <tns:custNameLbl>3332</tns:custNameLbl> 
        <tns:custNameData>dasdas</tns:custNameData> 
        <tns:dateLbl>date</tns:dateLbl> 
        <tns:dateData>01012001</tns:dateData> 
       </tns:formConfirmationInfo> 
      </tns:formFields> 
      <xfdf:field xmlns:xfdfi="http://ns.adobe.com/xfdf-transition/" 
         xfdfi:original="FSAPPLICATIONDATA_"> 
       <!--irrelevant data omitted--> 
      </xfdf:field> 
     </tns:form> 
    </xfa:data> 
</xfa:datasets> 
+0

首先几乎重复此FAQ我发现的[XSLT与XML源,有一个默认的命名空间设置为XMLNS](HTTP ://www.stackoverflow.com/questions/1344158/xslt-with-xml-source-that-has-a-default-namespace-set-to-xmlns) – 2011-02-23 23:13:12

回答

3

您需要在您的XSLT文件中指定的命名空间:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:xfdf="http://ns.adobe.com/xfdf/"> 
+0

+1为正确的答案。 – Flack 2011-02-24 07:16:59