Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过xpath按属性值搜索更改SimpleXML中的元素值_Php_Json_Xml_Xpath_Simplexml - Fatal编程技术网

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

Php 通过xpath按属性值搜索更改SimpleXML中的元素值,php,json,xml,xpath,simplexml,Php,Json,Xml,Xpath,Simplexml,从SimpleXML xpath更改元素 我想在某个属性之后通过xpath搜索来更改元素值 我有一个XML文件,我想在其中更改属性为“No”的所有元素的值 我访问上述结果的方式不起作用。如何在xpath请求的结果中访问SimpleXMLElement中元素(“ABC”)的值?我想进一步考虑开发(与XPath同级),这是一种专门用于转换XML文件的语言,特别适合处理许多元素。事实上,您甚至可以将诸如“test”之类的参数从PHP传递到XSLT。PHP可以在其类中运行XSLT1.0脚本,这可能需要在

从SimpleXML xpath更改元素

我想在某个属性之后通过xpath搜索来更改元素值

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

我访问上述结果的方式不起作用。如何在xpath请求的结果中访问SimpleXMLElement中元素(“ABC”)的值?我想进一步考虑开发(与XPath同级),这是一种专门用于转换XML文件的语言,特别适合处理许多元素。事实上,您甚至可以将诸如“test”之类的参数从PHP传递到XSLT。PHP可以在其类中运行XSLT1.0脚本,这可能需要在web服务器重新启动时在.ini文件中启用PHP_xsl扩展名

下面演示如何使用PHP传递的参数值调整具有
@No='001'
条件的一个类型元素。您可以根据需要扩展参数和模板的数量。在您进行调整之前,系统将复制整个文档

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


相信我,使用DOMDocument会更好地轻松使用DOMDocument。
<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

$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";

?>
    SimpleXMLElement
        @attributes:array(1)
            0:"ABC"
<?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>
...

// 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);