我有以下來自 xml 的內容,我在其中嘗試為 name="database" 的行引數化 value=""。
例如,第 1 行中的當前值 value="test.abc.com" 應替換為 value="new_test.abc.com" 的不同值。
注意:xml檔案中有多個這樣的行,下面的只是其中的一部分。
<?xml version="1.0" encoding= "UTF-8"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:resources.j2c="http://www.ibm.com/websphere/appserver/schemas/5.0/resources.j2c.xmi">
<resources.jdbc:JDBCProvider xmi:id="JDBCProvider_1" name="Oracle JDBC Driver (XA)" description="JDBC provider" providerType="Oracle JDBC Driver (XA)" isolatedClassloader="false" implementationClassName="oracle.jdbc.xa.client.OracleXADataSource" xa="false">
<classpath>${ORACLE_JDBC_DRIVER_PATH}/jdbc/Lib/gidbc7.jar</classpath>
<classpath>$(ORACLE_JDBC_DRIVER_PATH}/jdbc/Lib/oidbc:.jar</classpath>
<classpath>${ORACLE_JDBC_DRIVER_PATH}/rdbms/1L1b/xdb6.jar</classpath>
<factories xmi:type="resources. jdbc: DataSource" xmi:id="DataSource_1" name="DWLConfig" JndiName="jdbc/DWLConfig" description="XA Datasource for">
<propertySet xmi:id="J2EEResourcePropertySet_1">
<resourceProperties xmi:id="J2EEResourceProperty_1" name="databaseName" type="java.lang.String" value="test.abc.com" required="true"/>
<resourceProperties xmi:id="J2EEResourceProperty_2" name="driverType" type="java.Lang.String" value="4" description="" required="true"/>
<resourceProperties xmi:id="J2EEResourceProperty_3" name="serverName" type="java.lang.String" value="test-scan.abc.com" required="true"/>
<resourceProperties xmi:id="J2EEResourceProperty_4" name="portNumber" type="java.lang.String" value="1521" description="" required="true"/>
<resourceProperties xmi:id="J2EEResourceProperty_5" name="webSphereDefaultIsolationLevel" type="java.lang.Integer" value="2"/>
<resourceProperties xmi:id="J2EEResourceProperty_6" name= "downgradeHoldCursorsUnderXa" type="java.lang.Boolean" value="true"/>
<resourceProperties xmi:id="J2EEResourceProperty_7" name="UseRRASetEquals" type="java.lang.Boolean" value="true" description="Set for pME"/>
<resourceProperties xmi:id="J2EEResourceProperty_8" name="currentSchema" type="java.lang.String" value="INITIATE" description=""/>
<resourceProperties xmi:id="J2EEResourceProperty_9" name="URL" type="java.lang.String"/>
</propertySet>
<connectionPool xmi:id="ConnectionPool_1" connectionTimeout="180" maxConnections="85" minConnections="I" reapTime="180" unusedTimeout="1800"/>
<mapping xmi:id="MappingModule_1" mappingConfigAlias="" authDataAlias="Node01/User-config"/>
</factories>
</resources.jdbc:JDBCProvider>
</xmi:XMI>
我試過使用:
- name: xml update
xml:
path: "{{ item }}"
xpath: /xmi:XMI/resources.jdbc:JDBCProvider/factories/propertySet/resourceProperties[@name="database"]
attribute: value
value: new_test.abc.com
state: present
with_items:
- file1.xml
- file2.xml
但它會引發以下錯誤:
XPathEvalError: Undefined namespace prefix
uj5u.com熱心網友回復:
“未定義的命名空間前綴”意味著您在 XML 中使用命名空間前綴,但您沒有告訴 Ansible 對應的 XML 命名空間。如果您看到類似 的元素名稱<xmi:XMI>,則該前導xmi:前綴只是指向實際命名空間的指標,在本檔案中為http://www.omg.org/XMI.
因此,在您的xml任務中,您需要提供將namespaces前綴映射到實際命名空間的鍵:
- name: xml update
xml:
path: "{{ item }}"
xpath: /xmi:XMI/resources.jdbc:JDBCProvider/factories/propertySet/resourceProperties[@name="database"]
attribute: value
value: new_test.abc.com
state: present
namespaces:
xmi: http://www.omg.org/XMI
resources.jdbc: ...something...
with_items:
- file1.xml
- file2.xml
您發布的 XML 無效;它使用resources.jdbc命名空間前綴,但實際上并沒有在任何地方定義它。您需要修復該問題(并將適當的條目添加到namespaces任務中的字典中)才能使您的劇本正常作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/512775.html
標籤:linuxxml可靠的
