【问题标题】:Replace value in xml file替换xml文件中的值
【发布时间】:2021-01-28 07:17:52
【问题描述】:

我正在尝试用存储在 MyFile 中的新值替换 xml 文件中的密码值,有人可以告诉我如何实现这一点。谢谢

我的文件=test123

<Resource accessToUnderlyingConnectionAllowed="true" auth="Container" driverClassName="com.ibm.db2.jcc.DB2Driver" factory="com..tomcat.jndi.JSCommonsBasicDataSourceFactory" maxActive="100" maxIdle="30" maxWait="10000" name="jdbc/server" password="myPassword"/>

执行以下命令后出现以下错误,请指教。

 xmlstarlet ed --omit-decl --inplace \ --update '//Resource/@password' --value "testingfile" \ /apps/META-INF/context.xml

未能加载外部实体“--update”

 xmlstarlet ed --omit-decl --inplace --update '//Resource/@password' --value 'testingfile' /apps/META-INF/context.xml

/apps/META-INF/context.xml:26.119: AttValue: " or ' 预期 maxActive="100" maxIdle="30" maxWait="10000" name="jdbc/server" 密码= ^ /apps/META-INF/context.xml:26.119:属性构造错误 maxActive="100" maxIdle="30" maxWait="10000" name="jdbc/server" 密码= ^ /apps/META-INF/context.xml:26.119:找不到开始标记资源第 26 行的结尾 maxActive="100" maxIdle="30" maxWait="10000" name="jdbc/server" 密码= ^

【问题讨论】:

  • 1.有效的xml在开&lt;后不能有空格; 2.不能用大引号,用纯双引号。
  • Don't Parse XML/HTML With Regex. 我建议使用 XML/HTML 解析器 (xmlstarlet, xmllint ...)。

标签: xml bash unix sed


【解决方案1】:

首先,修复你的 XML

$ cat file.xml
<resources password="password"/>

接下来,除了真正的 XML 解析器之外,不要使用任何东西来编辑 XML。 很方便。

$ cat MyFile
test123
$ xmlstarlet ed --omit-decl --inplace \
                --update '//resources/@password' --value "$(cat MyFile)" \
                file.xml
$ cat file.xml
<resources password="test123"/>

要更改特定资源的密码,例如具有特定“名称”属性值的资源:

... --update '//resources[@name = "jdbc/server"]/@password' ...

【讨论】:

  • 无法执行,bash: xmlstarlet: command not found
  • @Kumar 安装它,然后。
  • 就像sudo apt install xmlstarletbrew install xmlstarlet 或...一样简单(根据您的操作系统进行调整)
  • 执行上述命令后,我看到加载外部实体“--update”失败,请查看更新的执行命令。谢谢。
  • 反斜杠用于续行。如果您要将命令全部放在行上,请删除那些反斜杠。 \ --update" --update" 相同,文字前导空格会阻止 xmlstarlet 看到更新选项。
猜你喜欢
  • 1970-01-01
  • 2016-03-10
  • 1970-01-01
  • 2017-08-07
  • 2021-11-06
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 2020-01-17
相关资源
最近更新 更多