1
我要去從那裏取一些數據,即this XML文件的結構轉換到另一個(新的元素名稱)另一個XML:的轉換XML結構使用XSLT和PHP
- 價值所有元素;
- 所有元素的值和元素的元素;
我剛開始玩XSLT並且知識薄弱,所以不要嚴格判斷我。我transform.xsl模板(不打印的XML元素名):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="/">
<xsl:apply-templates select="/RESPONSE/MULTIPLE/SINGLE/KEY" />
</xsl:template>
<!-- transformation to another xml file -->
<xsl:template match="/MULTIPLE">
<course>
<xsl:for-each select="SINGLE">
<topic>
<!-- Updated -->
<chapter><xsl:value-of select="KEY[@name='name']/VALUE" /></chapter>
<xsl:for-each select="KEY[@name='modules']/MULTIPLE/SINGLE">
<title><xsl:value-of select="KEY[@name='name']/VALUE" /></title>
<content><xsl:value-of select="KEY[@name='description']/VALUE" /></content>
</xsl:for-each>
<!-- /Updated -->
</topic>
</xsl:for-each>
</course>
</xsl:template>
預計stucture爲[更新]:
<?xml version="1.0" encoding="UTF-8"?>
<course>
<topic>
<chapter>Chapter Name 1</chapter>
<title>Title Name 1</title>
<content>Content 1</content>
</topic>
<!-- Updated -->
<topic>
<chapter>Chapter Name 1</chapter> <!-- print for each <title> and <content> -->
<title>Title Name 2</title>
<content>Content 2</content>
</topic>
<topic>
<chapter>Chapter Name n</chapter>
<title>Title Name n</title>
<content>Content n</content>
</topic>
<!-- Updated -->
...
</course>
和PHP程序:
$xml = new DOMDocument;
$xml->load("http://dl.dropbox.com/u/72519118/response.xml");
$xsl = new DOMDocument;
$xsl->load("transform.xsl");
// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml);
任何幫助,將不勝感激。
非常感謝,這是我真正想要的東西。另外一個問題是爲了考慮我將來使用xml處理的過程,我知道有很多方法和解決方案,但是對於像上面這樣的情況,轉換(解析)的最佳解決方案是什麼?順便說一下,上面提到的response.xml是簡化版本,通常它大約是10-30 Mb文件,當然我想使用該解決方案,這是轉換或解析此類xml文件中速度最快的解決方案。預先感謝您 – Dozent
忘了提及,您提出的方法是隻採用每個** **元素的第一** **單元,如果您查看原始的response.xml也是其他單元素(意味着每章可能有兩個或更多的主題)。我應該在上面的元素之前添加另一個for?或者? –
Dozent
就性能而言,我認爲上述任何一種解決方案都應該大致相同,因爲它們都非常簡單。關於在'modules'組下面處理多個'SINGLES',從你的例子中不清楚你想如何在輸出XML中表示,那麼你能解釋一下嗎?你能否舉一個這樣的結果應該看起來如何的例子?我現在要睡覺了,但一旦你澄清了這一點,我可以在大約7小時內更新我的答案。 – JLRishe