Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
用于更新XML文件数据的脚本_Xml_Bash_Shell_Awk_Sed - Fatal编程技术网

用于更新XML文件数据的脚本

用于更新XML文件数据的脚本,xml,bash,shell,awk,sed,Xml,Bash,Shell,Awk,Sed,我需要通过在below.xml文件中搜索avp名称来更新值字段 <avp name="CC-Request-Type" value="1"> </avp> <avp name="CC-Request-Number" value="0"> </avp> <avp name="Subscription-Id"> <avp name="Subscription-Id-Type" value="0"></avp&

我需要通过在below.xml文件中搜索avp名称来更新值字段

 <avp name="CC-Request-Type" value="1"> </avp>
  <avp name="CC-Request-Number" value="0"> </avp>
  <avp name="Subscription-Id">
  <avp name="Subscription-Id-Type" value="0"></avp>
  <avp name="Subscription-Id-Data" value="4081234567"></avp>
  <avp name="Framed-IP-Address" value="0xXXXXX"> </avp>

我需要搜索具有“框架IP地址”更新值的行,更新值为0xXXXXX到0xYYYYY


请让我知道如何使用sed、AWK或shell脚本。任何输入都将非常有用。

尝试使用此sed命令

sed '/<avp name=\"Framed-IP-Address\"/s~value=\"[^"]*\"~value="0xYYYYY"~g' file

sed'/这方面的正确工具是支持XML的

XSLT(通过
xsltproc
)或您可以使用的任何通用脚本语言(Python、Ruby、Perl、node.js,甚至PHP-CLI)都是修改XML的合适工具的示例。sed、awk或bash脚本就是不合适的例子

下面是一个基于XSLT的解决方案

<!-- modify-Framed-IP-Address.xsl -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="node() | @*">
    <xsl:copy><xsl:apply-templates select="node() | @*" /></xsl:copy>
  </xsl:template>

  <xsl:template match="avp[@name = 'Framed-IP-Address']/@value">
    <xsl:attribute name="value">0xYYYYY</xsl:attribute>
  </xsl:template>
</xsl:stylesheet>
将替换该属性并将结果保存到
output.xml

如果您不想使用XSLT,请使用您知道的脚本语言。例如,对于这样一个简单的任务,一个基于Python的解决方案的代码行数将少于10行。查看以了解如何开始

<!-- modify-Framed-IP-Address.xsl -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="node() | @*">
    <xsl:copy><xsl:apply-templates select="node() | @*" /></xsl:copy>
  </xsl:template>

  <xsl:template match="avp[@name = 'Framed-IP-Address']/@value">
    <xsl:attribute name="value">0xYYYYY</xsl:attribute>
  </xsl:template>
</xsl:stylesheet>
xsltproc modify-Framed-IP-Address.xsl input.xml -o output.xml