首页 > 解决方案 > 如何深入到节点并替换 XML 文件中的特定属性

问题描述

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE POWERMART SYSTEM "powrmart.dtd">
<POWERMART CREATION_DATE="07/23/2020 14:17:08" REPOSITORY_VERSION="186.95">
<REPOSITORY NAME="INFA_RS" VERSION="186" CODEPAGE="UTF-8" DATABASETYPE="Oracle">
<FOLDER NAME="Ritwik_3473" GROUP="" OWNER="1998" SHARED="NOTSHARED" DESCRIPTION="" PERMISSIONS="rwx---r--" UUID="b64b79bc-fe5c-4880-ae9d-6bf4a37cde6d">
<SOURCE BUSINESSNAME ="" DATABASETYPE ="Oracle" DBDNAME ="oracledatabase" DESCRIPTION ="" NAME ="CITIES" OBJECTVERSION ="1" OWNERNAME ="DW_USER" VERSIONNUMBER ="1">
    <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="number" DESCRIPTION ="" FIELDNUMBER ="1" FIELDPROPERTY ="0" FIELDTYPE ="ELEMITEM" HIDDEN ="NO" KEYTYPE ="NOT A KEY" LENGTH ="24" LEVEL ="0" NAME ="CUST_CITY_ID" NULLABLE ="NULL" OCCURS ="0" OFFSET ="0" PHYSICALLENGTH ="15" PHYSICALOFFSET ="0" PICTURETEXT ="" PRECISION ="15" SCALE ="0" USAGE_FLAGS =""/>
    <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar2" DESCRIPTION ="" FIELDNUMBER ="2" FIELDPROPERTY ="0" FIELDTYPE ="ELEMITEM" HIDDEN ="NO" KEYTYPE ="NOT A KEY" LENGTH ="0" LEVEL ="0" NAME ="CUST_CITY" NULLABLE ="NULL" OCCURS ="0" OFFSET ="24" PHYSICALLENGTH ="30" PHYSICALOFFSET ="15" PICTURETEXT ="" PRECISION ="30" SCALE ="0" USAGE_FLAGS =""/>
    <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar2" DESCRIPTION ="" FIELDNUMBER ="3" FIELDPROPERTY ="0" FIELDTYPE ="ELEMITEM" HIDDEN ="NO" KEYTYPE ="NOT A KEY" LENGTH ="0" LEVEL ="0" NAME ="CUST_STATE_PROVINCE" NULLABLE ="NULL" OCCURS ="0" OFFSET ="24" PHYSICALLENGTH ="40" PHYSICALOFFSET ="45" PICTURETEXT ="" PRECISION ="40" SCALE ="0" USAGE_FLAGS =""/>
    <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="number" DESCRIPTION ="" FIELDNUMBER ="4" FIELDPROPERTY ="0" FIELDTYPE ="ELEMITEM" HIDDEN ="NO" KEYTYPE ="NOT A KEY" LENGTH ="24" LEVEL ="0" NAME ="CUST_STATE_PROVINCE_ID" NULLABLE ="NULL" OCCURS ="0" OFFSET ="24" PHYSICALLENGTH ="15" PHYSICALOFFSET ="85" PICTURETEXT ="" PRECISION ="15" SCALE ="0" USAGE_FLAGS =""/>
    <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="number" DESCRIPTION ="" FIELDNUMBER ="5" FIELDPROPERTY ="0" FIELDTYPE ="ELEMITEM" HIDDEN ="NO" KEYTYPE ="NOT A KEY" LENGTH ="24" LEVEL ="0" NAME ="COUNTRY_ID" NULLABLE ="NULL" OCCURS ="0" OFFSET ="48" PHYSICALLENGTH ="15" PHYSICALOFFSET ="100" PICTURETEXT ="" PRECISION ="15" SCALE ="0" USAGE_FLAGS =""/>
</SOURCE>
<TARGET BUSINESSNAME ="" CONSTRAINT ="" DATABASETYPE ="Oracle" DESCRIPTION ="" NAME ="CITIES_TGT" OBJECTVERSION ="1" TABLEOPTIONS ="" VERSIONNUMBER ="1">
    <TARGETFIELD BUSINESSNAME ="" DATATYPE ="number" DESCRIPTION ="" FIELDNUMBER ="1" KEYTYPE ="NOT A KEY" NAME ="CUST_CITY_ID" NULLABLE ="NULL" PICTURETEXT ="" PRECISION ="15" SCALE ="0"/>
    <TARGETFIELD BUSINESSNAME ="" DATATYPE ="varchar2" DESCRIPTION ="" FIELDNUMBER ="2" KEYTYPE ="NOT A KEY" NAME ="CUST_CITY" NULLABLE ="NULL" PICTURETEXT ="" PRECISION ="30" SCALE ="0"/>
    <TARGETFIELD BUSINESSNAME ="" DATATYPE ="varchar2" DESCRIPTION ="" FIELDNUMBER ="3" KEYTYPE ="NOT A KEY" NAME ="CUST_STATE_PROVINCE" NULLABLE ="NULL" PICTURETEXT ="" PRECISION ="40" SCALE ="0"/>
    <TARGETFIELD BUSINESSNAME ="" DATATYPE ="number" DESCRIPTION ="" FIELDNUMBER ="4" KEYTYPE ="NOT A KEY" NAME ="CUST_STATE_PROVINCE_ID" NULLABLE ="NULL" PICTURETEXT ="" PRECISION ="15" SCALE ="0"/>
    <TARGETFIELD BUSINESSNAME ="" DATATYPE ="number" DESCRIPTION ="" FIELDNUMBER ="5" KEYTYPE ="NOT A KEY" NAME ="COUNTRY_ID" NULLABLE ="NULL" PICTURETEXT ="" PRECISION ="15" SCALE ="0"/>
    <TARGETFIELD BUSINESSNAME ="" DATATYPE ="varchar2" DESCRIPTION ="" FIELDNUMBER ="6" KEYTYPE ="NOT A KEY" NAME ="COUNTRY_NAME" NULLABLE ="NULL" PICTURETEXT ="" PRECISION ="40" SCALE ="0"/>
</TARGET>
<MAPPING DESCRIPTION ="" ISVALID ="YES" NAME ="Query_to_file" OBJECTVERSION ="1" VERSIONNUMBER ="1">
    <TRANSFORMATION DESCRIPTION ="" NAME ="SQ_CITIES" OBJECTVERSION ="1" REUSABLE ="NO" TYPE ="Source Qualifier" VERSIONNUMBER ="1">
        <TRANSFORMFIELD DATATYPE ="double" DEFAULTVALUE ="" DESCRIPTION ="" NAME ="CUST_CITY_ID" PICTURETEXT ="" PORTTYPE ="INPUT/OUTPUT" PRECISION ="15" SCALE ="0"/>
        <TRANSFORMFIELD DATATYPE ="string" DEFAULTVALUE ="" DESCRIPTION ="" NAME ="CUST_CITY" PICTURETEXT ="" PORTTYPE ="INPUT/OUTPUT" PRECISION ="30" SCALE ="0"/>
        <TRANSFORMFIELD DATATYPE ="string" DEFAULTVALUE ="" DESCRIPTION ="" NAME ="CUST_STATE_PROVINCE" PICTURETEXT ="" PORTTYPE ="INPUT/OUTPUT" PRECISION ="40" SCALE ="0"/>
        <TRANSFORMFIELD DATATYPE ="double" DEFAULTVALUE ="" DESCRIPTION ="" NAME ="CUST_STATE_PROVINCE_ID" PICTURETEXT ="" PORTTYPE ="INPUT/OUTPUT" PRECISION ="15" SCALE ="0"/>
        <TRANSFORMFIELD DATATYPE ="double" DEFAULTVALUE ="" DESCRIPTION ="" NAME ="COUNTRY_ID" PICTURETEXT ="" PORTTYPE ="INPUT/OUTPUT" PRECISION ="15" SCALE ="0"/>
        <TABLEATTRIBUTE NAME ="Sql Query" VALUE ="select * from CITIES_SRC"/>
        <TABLEATTRIBUTE NAME ="User Defined Join" VALUE =""/>
        <TABLEATTRIBUTE NAME ="Source Filter" VALUE =""/>
        <TABLEATTRIBUTE NAME ="Number Of Sorted Ports" VALUE ="0"/>
        <TABLEATTRIBUTE NAME ="Tracing Level" VALUE ="Normal"/>
        <TABLEATTRIBUTE NAME ="Select Distinct" VALUE ="NO"/>
        <TABLEATTRIBUTE NAME ="Is Partitionable" VALUE ="NO"/>
        <TABLEATTRIBUTE NAME ="Pre SQL" VALUE =""/>
        <TABLEATTRIBUTE NAME ="Post SQL" VALUE =""/>
        <TABLEATTRIBUTE NAME ="Output is deterministic" VALUE ="NO"/>
        <TABLEATTRIBUTE NAME ="Output is repeatable" VALUE ="Never"/>
    </TRANSFORMATION>
    <INSTANCE DESCRIPTION ="" NAME ="CITIES_TGT" TRANSFORMATION_NAME ="CITIES_TGT" TRANSFORMATION_TYPE ="Target Definition" TYPE ="TARGET"/>
    <INSTANCE DBDNAME ="oracledatabase" DESCRIPTION ="" NAME ="CITIES" TRANSFORMATION_NAME ="CITIES" TRANSFORMATION_TYPE ="Source Definition" TYPE ="SOURCE"/>
    <INSTANCE DESCRIPTION ="" NAME ="SQ_CITIES" REUSABLE ="NO" TRANSFORMATION_NAME ="SQ_CITIES" TRANSFORMATION_TYPE ="Source Qualifier" TYPE ="TRANSFORMATION">
        <ASSOCIATED_SOURCE_INSTANCE NAME ="CITIES"/>
    </INSTANCE>
    <CONNECTOR FROMFIELD ="CUST_CITY_ID" FROMINSTANCE ="SQ_CITIES" FROMINSTANCETYPE ="Source Qualifier" TOFIELD ="CUST_CITY_ID" TOINSTANCE ="CITIES_TGT" TOINSTANCETYPE ="Target Definition"/>
    <CONNECTOR FROMFIELD ="CUST_CITY" FROMINSTANCE ="SQ_CITIES" FROMINSTANCETYPE ="Source Qualifier" TOFIELD ="CUST_CITY" TOINSTANCE ="CITIES_TGT" TOINSTANCETYPE ="Target Definition"/>
    <CONNECTOR FROMFIELD ="CUST_STATE_PROVINCE" FROMINSTANCE ="SQ_CITIES" FROMINSTANCETYPE ="Source Qualifier" TOFIELD ="CUST_STATE_PROVINCE" TOINSTANCE ="CITIES_TGT" TOINSTANCETYPE ="Target Definition"/>
    <CONNECTOR FROMFIELD ="CUST_STATE_PROVINCE_ID" FROMINSTANCE ="SQ_CITIES" FROMINSTANCETYPE ="Source Qualifier" TOFIELD ="CUST_STATE_PROVINCE_ID" TOINSTANCE ="CITIES_TGT" TOINSTANCETYPE ="Target Definition"/>
    <CONNECTOR FROMFIELD ="COUNTRY_ID" FROMINSTANCE ="SQ_CITIES" FROMINSTANCETYPE ="Source Qualifier" TOFIELD ="COUNTRY_ID" TOINSTANCE ="CITIES_TGT" TOINSTANCETYPE ="Target Definition"/>
    <CONNECTOR FROMFIELD ="CUST_CITY_ID" FROMINSTANCE ="CITIES" FROMINSTANCETYPE ="Source Definition" TOFIELD ="CUST_CITY_ID" TOINSTANCE ="SQ_CITIES" TOINSTANCETYPE ="Source Qualifier"/>
    <CONNECTOR FROMFIELD ="CUST_CITY" FROMINSTANCE ="CITIES" FROMINSTANCETYPE ="Source Definition" TOFIELD ="CUST_CITY" TOINSTANCE ="SQ_CITIES" TOINSTANCETYPE ="Source Qualifier"/>
    <CONNECTOR FROMFIELD ="CUST_STATE_PROVINCE" FROMINSTANCE ="CITIES" FROMINSTANCETYPE ="Source Definition" TOFIELD ="CUST_STATE_PROVINCE" TOINSTANCE ="SQ_CITIES" TOINSTANCETYPE ="Source Qualifier"/>
    <CONNECTOR FROMFIELD ="CUST_STATE_PROVINCE_ID" FROMINSTANCE ="CITIES" FROMINSTANCETYPE ="Source Definition" TOFIELD ="CUST_STATE_PROVINCE_ID" TOINSTANCE ="SQ_CITIES" TOINSTANCETYPE ="Source Qualifier"/>
    <CONNECTOR FROMFIELD ="COUNTRY_ID" FROMINSTANCE ="CITIES" FROMINSTANCETYPE ="Source Definition" TOFIELD ="COUNTRY_ID" TOINSTANCE ="SQ_CITIES" TOINSTANCETYPE ="Source Qualifier"/>
    <TARGETLOADORDER ORDER ="1" TARGETINSTANCE ="CITIES_TGT"/>
    <ERPINFO/>
</MAPPING>
</FOLDER>
</REPOSITORY>
</POWERMART>

这是一个 informatica 映射的 XML 文件,我想使用 powershell 修改这个 XML 文件 我希望使用 powershell 更改 NAME ="CUST_CITY_ID" 的值和 NAME ="CUST_CITY_CODE"。我在深入到特定节点然后对特定属性使用替换功能时遇到问题。新更新我可以使用以下命令访问我想要的属性。我只需要为此添加替换功能

$xmlFilePath = 'C:\Users\ritsharma\Desktop\original.xml'
$xmlfile = get-content $xmlFilePath
$xml=New-Object -TypeName XML
$xml.load($xmlFilePath)
$xml.selectnodes("/POWERMART/REPOSITORY/FOLDER/MAPPING/TRANSFORMATION/TRANSFORMFIELD[@NAME=""ES_DISB_ST_CHG_DT""]")

标签: xmlpowershellpowershell-2.0powershell-3.0powershell-4.0

解决方案


推荐阅读