我是XML PHP和XPATH的新手。
我有一个XML文件如下
<?xml version="1.0" encoding="UTF-8"?>
<sections>
<section name="Windows 7" id="7">
<section name="Registry" id="29">
<section name="hkcu" id="30">
<section name="software" id="31">
</section>
</section>
</section>
</section>
<section name="Server 2012" id="33">
</section>
</sections>
我可以删除一个节点即。 <section>
或添加<section>
。
我正在努力的是有一种方法将节点及其子节点移动到另一个节点IE部分。
例如,移动ID =“30”的部分,并将其子节点改为ID =“33”的部分。
任何帮助都将不胜感激。
答案 0 :(得分:1)
XSLT旨在转换XML文档。它使用样式表描述从输入XML文档到输出文档的转换。
E.g。以下转型
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output version="1.0" encoding="UTF-8" method="xml" indent="yes" />
<xsl:strip-space elements="*"/>
<!-- identity transformation -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<!-- remove section with id 30 -->
<xsl:template match="section[@id='30']"/>
<!-- copy section with id 33 and add (as a child) section with id 30 -->
<xsl:template match="section[@id='33']">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
<xsl:copy-of select="//section[@id='30']"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
会将您的输入文件转换为:
<?xml version="1.0"?>
<sections>
<section name="Windows 7" id="7">
<section name="Registry" id="29">
</section>
</section>
<section name="Server 2012" id="33">
<section name="hkcu" id="30">
<section name="software" id="31">
</section>
</section>
</section>
</sections>
XPath和XSLT需要一些学习才能开始,但是一旦你掌握了它,就会有一个通用的工具来随时转换XML文档。
另外,在PHP中运行XSLT(确保在.ini文件中启用 extension = php_xsl.dll 或 extension = php_xsl.so )将输出一个字符串XML值,该值可以转储到文件中或回显到屏幕:
// LOAD XML AND XSL FILES
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->load('Input.xml');
$xslfile = new DOMDocument('1.0', 'UTF-8');
$xslfile->load('XSLTSCript.xsl');
// TRANSFORM XML with XSLT
$proc = new XSLTProcessor;
$proc->importStyleSheet($xslfile);
$newXML = $proc->transformToXML($xml);
# ECHO OUTPUT STRING
echo $newXML;