首先,我已经扫描了几天这个问题的答案,但没有用 - 但是在处理了多年的原始网络之后自我教学有一些挑战,很抱歉,如果这是一个非常基本的问题。
两个问题:
我试图转换'项目'嵌套XML文档的元素,没有任何其他库:
的example.xml:
<?xml version="1.0" encoding="utf-8"?>
<Order>
<stuff></stuff>
<Items>
<OrderItem>
<qty>1</qty>
<Name>Latte</Name>
<Cost>$ 4.50</Cost>
<Options ID="1">
<Cost>0.50</Cost>
<Name>Soy Milk</Name>
<QTY>1</QTY>
</Options>
<Options ID="2">
<Cost>0.00</Cost>
<Name>Sugar</Name>
<QTY>2</QTY>
</Options>
</OrderItem>
</Items>
<MoreStuff></MoreStuff>
</Order>
进入带有一些文字缩进的平面版本
^^^ preceding text bits ^^^
<line> 1 Latte $4.50 </line>
<line> 1 x Soy Milk (0.50) </line>
<line> 2 x Sugar (0.00) </line>
---- continue for other bits ---
我确定我错过了一些东西,因为这应该很容易,但是我有一段时间可以让它工作:
$xml = simplexml_load_file('<<source file>>');
foreach($xml->Items->children() as $child)
{
echo '<text> ' . $child->qty . ' ' . $child->Name . ' ' . $child->Cost . '</text>';
}
所以我很确定我会遇到一个非常简单的新错误。
答案 0 :(得分:1)
我会使用XSLT
。拥有以下样式表:
flatten.xsl
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="/Order/Items/OrderItem">
<line>
<xsl:text> </xsl:text>
<xsl:value-of select="qty" />
<xsl:text> </xsl:text>
<xsl:value-of select="Name" />
<xsl:text> </xsl:text>
<xsl:value-of select="Cost" />
<xsl:text> </xsl:text>
</line>
<xsl:for-each select="Options"><xsl:text>
</xsl:text>
<line>
<xsl:text> </xsl:text>
<xsl:value-of select="QTY" />
<xsl:text> x </xsl:text>
<xsl:value-of select="Name" />
<xsl:text> </xsl:text>
<xsl:value-of select="Cost" />
<xsl:text> </xsl:text>
</line>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
您可以使用PHP中的以下代码应用上述样式表:
$xml = new DOMDocument();
$xsl = new DOMDocument();
$xml->load("example.xml");
$xsl->load("flatten.xsl");
$xsltproc = new XSLTProcessor();
$xsltproc->importStyleSheet($xsl);
echo $xsltproc->transformToXML($xml);
输出:
<?xml version="1.0"?>
<line> 1 Latte $ 4.50 </line>
<line> 1 x Soy Milk 0.50 </line>
<line> 2 x Sugar 0.00 </line>