我想要一个代码来读取xml文件并递归获取其所有节点值并检查节点的级别。每个节点都打印一次,如果节点级别为2或大于2,则在节点名称前打印一个文本字段。但我没有得到任何节点值。提前谢谢你
我的代码:
<!DOCTYPE html>
<html>
<head> INSERT VALUES OF THE GIVEN PHRASE IDS : </head>
<!-- <head> <link rel="stylesheet" type="text/css" href="style.css" /></head> -->
<body>
<form name="form" action="xmlform.php" method="post">
<?php
echo ("<pre>");
$file="english.xml";
if(file_exists($file))
{
$xml=simplexml_load_file("$file") or die("Error: Cannot create object");
foreach ($xml as $xmlRoot => $value) {
$lvl=0;
$xmlNode=$value->children();
//if(is_null($value->children())) {echo "true";}exit();
echo '<input type="text" name="xmlNode" value="'.$xmlNode.'" > <br>';
function makeAFieldForNode($xmlNode, $lvl) {
if ($lvl >= 2) {
echo '<input type="text" value="" name="value"> <br>';
}
$newLvl = $lvl++;
foreach ( $xmlNode->children() as $xn) {
makeAFieldForNode($xN, $newLvl);
}
}
makeAFieldForNode();
}
}
echo ("</pre>");
?>
</form>
</body>
</html>
english.xml
<?xml version="1.0"?>
<?xml-stylesheet href="catalog.xsl" type="text/xsl"?>
<!DOCTYPE catalog SYSTEM "catalog.dtd">
<catalog>
<product description="Cardigan Sweater" id="123" value="" product_image="cardigan.jpg">
<catalog_item gender="Men's">
<size description="Medium">
<color_swatch image="red_cardigan.jpg" id="color" value="Red"/>
<color_swatch image="burgundy_cardigan.jpg" id="color" value="burgundy"/>
</size>
<size description="Large">
<color_swatch image="red_cardigan.jpg" id="color" value="Red"/>
<color_swatch image="burgundy_cardigan.jpg" id="color" value="burgundy"/>
</size>
</catalog_item>
</product>
</catalog>
如果你看到上面的xml文件,我想要一个输出中的表单我想要这样的东西
catalog
product
123 (123 is id and text field for value infront of it )
catalog-item
size
color_swatch
color (color id id of color_swatch and text field for value)
所以,如果我在提交按钮上添加一些值,我可以生成一个新的xml文件,就像已经存在但具有各个元素的id值的新值。目前我正在尝试使用xml文件的所有元素生成该表单。我想要一个动态代码,所以无论它是什么xml文件。我的代码应该读取每个元素并读取它并给出id和text字段的值。我希望你明白我的观点。
答案 0 :(得分:1)
小心增量运算符的位置:
$newLvl = $lvl++;
$newLvl
会在增量之前获得$lvl
的值(请参阅http://3v4l.org/aj7t3)
在您的情况下,您甚至不需要新变量,只需执行$lvl++
并在函数调用中使用它:
$lvl++;
foreach ( $xmlNode->children() as $xn) {
makeAFieldForNode($xN, $lvl);
}
编辑:要做出更完整的答案,我需要知道你的意思:
节点值
和
打印每个节点
因为您的某些节点没有value
属性(例如product
或size
)。
如果您可以提供您想要获得的输出示例,那将有助于了解您的需求。
<小时/> ==编辑:添加脚本==