2017-03-09 2 views
1

„Ich möchte XML-Dateien umbenennen. Wie old.xml mit Xslt New.xml aber mein Code funktioniert nicht bitte überprüfen.So benennen Sie XML-Dateien mit xslt um. Mein Code ist

<xsl:for-each select="document('file:///d:/123/xslt_path.html')//@path"> 
    <xsl:variable name="aa" select="."/> 
    <xsl:variable name="aaa" select="concat('file:///', $aa)"/> 
    <xsl:variable name="ajeet_1" select="iri-to-uri(replace($aaa, '\\', '/'))"/> 
    <xsl:variable name="ajeet_coll" select="collection(concat($ajeet_1, '/?select=*.xml;recurse=yes'))"/> 
    <xsl:for-each select="$ajeet_coll"> 
    <xsl:if test="//citation=''"> 
     <xsl:variable name="hhhh" select="'file:///d:/123/list_of_files.html'"/> 
     <xsl:result-document href="{$hhhh}"> 
     <xsl:value-of select="replace(tokenize(document-uri(.), '/')[last()], '%20', ' ')"/> 
     <xsl:text>Citation Tag Empty</xsl:text> 
     </xsl:result-document> 
    </xsl:if> 
    <xsl:if test="//citation"> 
     <xsl:variable name="aa1" select="node()"/> 
     <xsl:variable name="jaanam" select="replace(replace($aa1, '([^&lt;&gt;]+) : ([^&lt;&gt;]+)', '$1'), ' ', '_')"/> 
     <xsl:variable name="jaanam1" select="concat(replace(tokenize(document-uri(.), '/')[last()], '%20', ' '), '')"/> 
     <xsl:copy-of select="document($jaanam)"/> 
    </xsl:if> 
    </xsl:for-each> 
</xsl:for-each> 
+1

gibt mehr Details über das, was in enthält "file: /// d: /123/xslt_path.html" und was Sie enthalten in "file: /// d: /123/list_of_files.html" – Rupesh

+0

xslt_path .html: - d: \ 2017 \ working \ 003_March \ 2017_03_08 Datei: /// d: /123/list_of_files.html Schreibfehler –

+0

Obwohl es möglich ist, ist XSLT eine spezielle Sprache, die wirklich dafür entwickelt wurde eine Sache: XML-Inhalt umwandeln. Betrachten Sie eine allgemeine Sprache (Java, PHP, Python), die OS-Dateisystemänderungen wie das Umbenennen von Dateien viel einfacher durchführen und ausführen kann. – Parfait

Antwort

1
<?xml version="1.0"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml"/> 
<xsl:template match="/"> 
<xsl:for-each select="document('file:///d:/xslt_path.html')//@path"> 
<xsl:variable name="ajeet_1" select="iri-to-uri(concat('file:///', replace(., '\\', '/')))"/> 
<xsl:variable name="ajeet_coll" select="collection(concat($ajeet_1, '/?select=*.xml;recurse=yes'))"/> 
<xsl:variable name="hhhh" select="'file:///d:/list_of_files.html'"/> 
<xsl:result-document href="{$hhhh}"> 
<xsl:for-each select="$ajeet_coll"> 
<xsl:choose> 
<xsl:when test="//citation=''"> 
<xsl:text>Citation Tag Empty : </xsl:text> 
<xsl:value-of select="replace(tokenize(document-uri(.), '/')[last()], '%20', ' ')"/> 
<xsl:text>&#xa; </xsl:text> 
</xsl:when> 
<xsl:otherwise> 
<xsl:if test="//citation!=''"> 
<xsl:variable name="aa1" select="node()"/> 
<xsl:variable name="citation" select="//citation/text()"/> 
<xsl:variable name="jaanam"> 
<xsl:value-of select="tokenize(document-uri(.), '/')[position() ne last()]" separator="/"/> 
<xsl:value-of select="concat('/', replace(normalize-space(replace($citation, '([^:]+)', '$1')), ' ', '_'), '.xml')"/> 
</xsl:variable> 
<xsl:result-document href="{$jaanam}"> 
<xsl:copy-of select="$aa1"/> 
</xsl:result-document> 
</xsl:if> 
</xsl:otherwise> 
</xsl:choose> 
</xsl:for-each> 
</xsl:result-document> 
</xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 
0

Sie können nicht Datei in Xslt umbenennen, aber Sie können neue erstellen Dokument nach Ihren Anforderungen

Änderung dieser

<xsl:if test="//citation=''"> 
    <xsl:variable name="hhhh" select="'file:///d:/123/list_of_files.html'"/> 
    <xsl:result-document href="{$hhhh}"> 
    <xsl:value-of select="replace(tokenize(document-uri(.), '/')[last()], '%20', ' ')"/> 
    <xsl:text>Citation Tag Empty</xsl:text> 
    </xsl:result-document> 
</xsl:if> 

zu

<xsl:variable name="hhhh" select="'file:///d:/123/list_of_files.html'"/> 
      <xsl:result-document href="{$hhhh}"> 
       <xsl:for-each select="$ajeet_coll"> 
        <xsl:if test="//citation=''"> 
         <xsl:value-of select="replace(tokenize(document-uri(.), '/')[last()], '%20', ' ')"/> 
         <xsl:text>Citation Tag Empty</xsl:text> 
        </xsl:if> 
       </xsl:for-each> 
      </xsl:result-document> 

weil es einen möglichen Fehler aufgrund der Wiederholung fehlenden Zitats verursacht.

und ändern diese

<xsl:if test="//citation"> 
     <xsl:variable name="aa1" select="node()"/> 
     <xsl:variable name="jaanam" select="replace(replace($aa1, '([^&lt;&gt;]+) : ([^&lt;&gt;]+)', '$1'), ' ', '_')"/> 
     <xsl:variable name="jaanam1" select="concat(replace(tokenize(document-uri(.), '/')[last()], '%20', ' '), '')"/> 
     <xsl:copy-of select="document($jaanam)"/> 
    </xsl:if> 

zu

<xsl:for-each select="$ajeet_coll"> 
     <xsl:if test="//citation!=''"> 
      <xsl:variable name="aa1" select="node()"/> 
      <xsl:variable name="jaanam" select="replace(replace($aa1, '([^&lt;&gt;]+) : ([^&lt;&gt;]+)', '$1'), ' ', '_')"/> 
      <xsl:variable name="jaanam1" select="concat(replace(tokenize(document-uri(.), '/')[last()], '%20', ' '), '')"/> 
      <xsl:result-document href="{$jaanam1}"> 
      <xsl:copy-of select="$aa1"/> 
      </xsl:result-document> 
     </xsl:if> 
    </xsl:for-each> 

es Ihr Problem mit einigen Änderungen lösen kann.

Verwandte Themen