【发布时间】:2022-01-21 07:58:04
【问题描述】:
我有一个从另一个程序生成的 XML 文件,但我想附加到 XML 以便其他程序仍然可以读取数据。我编写了一个 PHP 脚本来简化应用程序,但我无法让它以我想要的方式工作。正如现在写的那样,我可以追加到 XML 文件,但它只会追加到第一组元素。
<?php
$file = "RouteSymbol.xml";
if (file_exists($file)) {
$orders = simplexml_load_file($file,"SimpleXMLElement", LIBXML_NOERROR | LIBXML_ERR_NONE) or die("Error: Cannot create object");
echo "<table border='1'>";
foreach ($orders->xpath(".//HighwayRoutingData") as $routingPoints){
$tag=(string)$routingPoints->tag;
echo "<tr>";
echo "<td>".$tag."</td>";
$stringArr =array();
foreach($routingPoints->xpath(".//destinationSymbols//string") as $symbol){
$string=(string)$symbol;
$stringArr[] = $string;
}
$stringImp = implode(',', $stringArr);
echo "<td>";
echo $stringImp;
echo "</td>";
echo "<td>";
?>
<form method="POST" action="addSymbol.php">
<input type="text" name="symbol">
<?php
echo '<input type="hidden" name="location" value="'.$tag.'">';
echo '<input type="hidden" name="fileName" value="'.$file.'">';
?>
<input type="submit" name="addSymbol" value="ADD">
</form>
<?php
echo "</td>";
echo "<td>";
echo "<a href='#'>Delete</a>";
echo "</td>";
echo "</tr>";
}
echo "</table>";
}else{
echo "Invalid request!";
}
附加代码
<?php
$fileName = "";
if (isset($_POST['addSymbol'])) {
$xml = new DomDocument();
//$fileName = $_POST['fileName'];
$xml->load('RouteSymbol.xml');
$symbol = $_POST['symbol'];
$rootTag = $xml->getElementsByTagName('destinationSymbols')->item(0);
$symbolTag = $xml->createElement("string", $symbol);
$rootTag->appendChild($symbolTag);
$xml->save($_POST['fileName']);
//echo $fileName;
header("location:trainRouting.php");
}else{
echo "Could not Load".$fileName;
}
我附加到的 XML 文件,现在脚本似乎只想附加到 @I80 目标符号。当它确实追加时,它也会追加到当前字符串标记集的右侧而不是下面
<?xml version="1.0"?>
<ArrayOfHighwayRoutingData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<HighwayRoutingData>
<tag>@I80</tag>
<destinationSymbols>
<string>SFO</string>
<string>OAK</string>
<string>EMR</string>
<string>ELC</string>
<string>RIC</string>
<string>SPB</string>
<string>HER</string><string>HER</string></destinationSymbols>
</HighwayRoutingData>
<HighwayRoutingData>
<tag>@SR24</tag>
<destinationSymbols>
<string>OAK</string>
<string>ORI</string>
<string>LFY</string>
<string>WCR</string>
</destinationSymbols>
</HighwayRoutingData>
<HighwayRoutingData>
<tag>@US101</tag>
<destinationSymbols>
<string>SFO</string>
<string>SSC</string>
<string>MIL</string>
<string>PAO</string>
</destinationSymbols>
</HighwayRoutingData>
</ArrayOfHighwayRoutingData>
如果有帮助,有一个代码笔https://codepen.io/dsflyerds/pen/BawZzMx
【问题讨论】:
-
您需要显示添加数据的代码以提供帮助。
-
I would like to append to the XML- 附加新内容的代码在哪里?我看到上面读取了现有文件并生成了 HTML 输出,但我看不到 XML 的附加或修改 -
顺便说一句,上面读取 XMl 并生成 HTML 内容的代码可以使用 XSLT 样式表来完成?
-
@ProfessorAbronsius 对不起,我忘了包括它。它现在在那里
-
提交表单时,您希望向每个
HighwayRoutingData部分添加一个新元素,还是根据表单元素中提供的值添加到特定部分?