gpt4 book ai didi

php - 通过 xpath 按属性值搜索更改 SimpleXML 中的元素值

转载 作者:行者123 更新时间:2023-12-02 05:12:53 25 4
gpt4 key购买 nike

从 SimpleXML xpath 更改元素

我想通过特定属性后的 xpath 搜索来更改元素值。

我有一个 XML 文件,我想在其中更改属性为“否”的所有元素的值

<Value1>
<Type No="001">ABC</Type>
</Value1>
<Value2>
<Type No="002">CDE</Type>
<ID No="003">DEF</ID>
<ShareID No="004">GFH</ShareID>
</Value2>
...
...

在 PHP 中,我编写了一个脚本,该脚本应该搜索具有属性“No”的所有元素,并且应该通过给定的 Json 表更改值。在表中,我有 ID 和值对。

作为第一个原型(prototype),我刚刚编写了一个脚本,将第一个元素 No='001' 更改为“测试”;

<?php

$data = file_get_contents( "php://input" ); //$data is now the string '[1,2,3]';

$data = json_decode( $data ); //$data is now a php array array(1,2,3)

$test = $data->data;

// load the document

// Load XML File
$xml = simplexml_load_file($data->xmlFile);

//TODO Change each Element which is in the JSON Table

$result = $xml->xpath("//*[@No='001']");

// TODO Change every Element by corresponding JSON Table

$result[0] = "Test";

// save the updated document
$xml->asXML($data->xmlFile);

echo "OK";

?>

作为 xpath 函数的结果,我收到以下数组:

    SimpleXMLElement
@attributes:array(1)
0:"ABC"

我访问上面结果的方式不起作用。如何访问 xpath 请求结果中 SimpleXMLElement 中元素的值(“ABC”)?我想要进一步发展

最佳答案

考虑XSLT (XPath 的同级),一种专用语言,旨在转换 XML 文件,特别适合处理许多元素。事实上,您甚至可以将 'test' 之类的参数从 PHP 传递到 XSLT。 PHP 可以使用其 xsl 运行 XSLT 1.0 脚本。类可能需要在 .ini 文件中启用 php_xsl 扩展并重新启动 Web 服务器。

下面演示了使用从 PHP 传递的参数值来调整具有 @No='001' 条件的一个 Type 元素。您可以根据需要扩展参数和模板的数量。 Identity Transform按调整前的原样复制整个文档。

XSLT (另存为 .xsl 文件,一种特殊的 .xml 文件)

<?xml version="1.0" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- Initializing Parameters -->
<xsl:param name="php_param"/>

<!-- Identity Transform -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>

<!-- Assign New Text Value by Parameter -->
<xsl:template match="Type[@No='001']">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:value-of select="$php_param"/>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

PHP

...

// LOAD XML
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->load($data->xmlFile);

// LOAD XSLT
$xsl = new DOMDocument('1.0', 'UTF-8');
$xsl->load('XSLT_Script.xsl');

// INITIALIZE TRANSFORMER
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);

// SET PARAMETER VALUE
$proc->setParameter('', 'php_param', 'test');

// TRANSFORM SOURCE
$newXML = $proc->transformToDoc($xml);

// SAVE TO FILE
file_put_contents($data->xmlFile, $newXML);

关于php - 通过 xpath 按属性值搜索更改 SimpleXML 中的元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52147831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com