2015-05-20 2 views
0

у меня есть:Изменение значения XML с помощью XSLT

<parent> 
    <groupId>com.test.example</groupId> 
    <artifactId>myProject</artifactId> 
    <version>00.01.00.00</version> 
</parent> 

То, что я хочу

<parent> 
    <groupId>com.test.example</groupId> 
    <artifactId>parameter1</artifactId> 
    <version>parameter2</version> 
</parent> 

Так что я сделал Java GUI, где я положил свои параметры (это только кнопка код события):

private void btnModifyActionPerformed(ActionEvent e) { 
    String strArtifactID = txtArtifactID.toString(); 
    int iVersion = new Integer(txtVersion.getText()); 


    Source xmlInput = new StreamSource(new File("c:/Users/balestrierih/Desktop/pomReplace.xml")); 
    Source xsl = new StreamSource(new File("c:/Users/balestrierih/Desktop/pomReplace.xsl")); 
    Result xmlOutput = new StreamResult(new File("c:/Users/balestrierih/Desktop/output.xml")); 

    try { 
     Transformer transformer = TransformerFactory.newInstance().newTransformer(xsl); 
     transformer.transform(xmlInput, xmlOutput); 
    } catch (TransformerException TE) { 
     TE.getMessage(); 
    } 

} 

он запустит XSL код:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes"/> 

<xsl:template match="artifactID"> 
     <xsl:param name="strArtifactID"/> 
     <xsl:apply-templates select="($strArtificatID)"/> 
</xsl:template> 

<xsl:template match="version"> 
     <xsl:param name="iVersion"/> 
     <xsl:apply-templates select="($iVersion)"/> 
</xsl:template> 
</xsl:stylesheet> 

Но когда я запускаю мою программку, я получил ошибку, которая говорит, что код XSLT не является правильным

+3

Не знаю, если это проблема, но у вас есть misspelt '($ strArtifactID) 'в вашем XSLT – kaykay

+0

Спасибо, но это не решило проблему –

+0

Что именно ваша проблема? Прерывание вашего xslt-преобразования или вы не знаете, как получить желаемый результат xml? –

ответ

0

Я думаю, вам нужен глобальные параметры (при условии, вы хотите установить их значение, перед запуском преобразования), а затем, конечно, вам нужно просто поместить значение параметров в элементы, которые вы хотите управлять с помощью XSLT:

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

    <xsl:output method="xml" indent="yes"/> 

    <xsl:param name="strArtifactID"/> 
    <xsl:param name="iVersion"/> 

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

    <xsl:template match="artifactId"> 
    <xsl:copy> 
     <xsl:value-of select="$strArtifactID"/> 
    </xsl:copy> 

    </xsl:template> 

    <xsl:template match="version"> 
    <xsl:copy> 
     <xsl:value-of select="$iVersion"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

Теперь вы можете установить параметры и элементы с именем artifactId (обратите внимание на различия в орфографии) и version будут заполнены значениями параметров, переданными в.

+0

Спасибо, ваш код выглядит очень правильно, но у меня все еще есть какие-либо изменения в моем выходе –

+0

Ну, я показал часть кода XSLT, конечно, вам нужно изменить Java-код, а также пока он не устанавливает никаких параметров, поэтому убедитесь, что вы делаете 'transformer.setParameter (" strArtifactID ", strArtifactID)' в вашем вызове Java перед вызовом метода 'transform'. –

+0

Выполнено, но ничего не изменится ... не следует ли использовать метод замены? как: \t \t \t '' вместо \t \t \t ' ' –

Смежные вопросы