Xpath 正确使用msbuild xmlpoke的方法

Xpath 正确使用msbuild xmlpoke的方法,xpath,msbuild,namespaces,prefix,xmlpoke,Xpath,Msbuild,Namespaces,Prefix,Xmlpoke,如果元素值匹配,我将尝试设置元素的值 “ABB Automation Builder Platform.abpkg” 我的脚本使用xmlpoke,如下所示: <XmlPoke Namespaces="&lt;Namespace Prefix='x' Uri='http://www150.abb.com/spaces/DAE-1/ProdDev/Shared%20Documents/40%20DAE%20Installer/Design/XML%2

如果元素值匹配,我将尝试设置元素的值 “ABB Automation Builder Platform.abpkg”

我的脚本使用xmlpoke,如下所示:

<XmlPoke 
                Namespaces="&lt;Namespace Prefix='x'  Uri='http://www150.abb.com/spaces/DAE-1/ProdDev/Shared%20Documents/40%20DAE%20Installer/Design/XML%20Descriptions/DAEInstaller_Description_StyleSheet' &gt;"
                Query="x:ProductUpdate/x:Packages/x:Package[x:FileName='ABB Automation Builder Platform.abpkg']/x:FileHash"
                XmlInputPath="Output\update.manifest"
                Value="Ajay Vishwakarma"/>

我试图修改的xml如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ProductUpdate xmlns="http://www150.abb.com/spaces/DAE-1/ProdDev/Shared%20Documents/40%20DAE%20Installer/Design/XML%20Descriptions/DAEInstaller_Description_StyleSheet">
  <Strings>
    <Text id="1">
      <Neutral>ABB Automation Builder 1.0 \nService Release 1</Neutral>
      <Localized culture="en">ABB Automation Builder 1.0 \nService Release 1</Localized>
      <Localized culture="de">ABB Automation Builder 1.0 \nService Release 1</Localized>
      <Localized culture="fr">ABB Automation Builder 1.0 \nService Release 1</Localized>
      <Localized culture="es">ABB Automation Builder 1.0 \nService Release 1</Localized>
      <Localized culture="zh">ABB Automation Builder 1.0 \nService Release 1</Localized>
    </Text>
    <Text id="2">
      <Neutral>Information\ABB Automation Builder Upate Package V1_0_1Description_en.htm</Neutral>
      <Localized culture="en">Information\ABB Automation Builder Upate Package V1_0_1Description_en.htm</Localized>
      <Localized culture="de">Information\ABB Automation Builder Upate Package V1_0_1Description_de.htm</Localized>
      <Localized culture="fr">Information\ABB Automation Builder Upate Package V1_0_1Description_fr.htm</Localized>
      <Localized culture="es">Information\ABB Automation Builder Upate Package V1_0_1Description_es.htm</Localized>
      <Localized culture="zh">Information\ABB Automation Builder Upate Package V1_0_1Description_zh.htm</Localized>
    </Text>
  </Strings>
  <ReleaseType>ServicePack</ReleaseType>
  <ProductName>$1</ProductName>
  <Version>1.0.1</Version>
  <Description>$2</Description>
  <License>
    <Name>$3</Name>
    <ID>45668677876463</ID>
    <Description>$4</Description>
    <Version>1.0.1</Version>
    <DescriptionVersion>$5</DescriptionVersion>
    <DescriptionTypeVersion>1.0.0</DescriptionTypeVersion>
    <ToAccept>true</ToAccept>
  </License>
  <Copyright>$6</Copyright>
  <MinimumRequiredVersion>1.0.0</MinimumRequiredVersion>
  <Packages>
    <Package>
      <Name>ABB Automation Builder Platform Update Package</Name>
      <Description>ABB Automation Builder Platform Update Package</Description>
      <FileName>ABB Automation Builder Platform.abpkg</FileName>
      <FileHash>AjayVishwakarma</FileHash>
      <FileDownload>
      </FileDownload>
      <InstallerData>
        <Component>
          <Name>ABB Automation Builder Package Manager</Name>
          <ID>{F5B05B3F-9FA5-476E-BDD3-DB1397CABF4C}</ID>
          <Version>1.0.1.0</Version>
          <InstallAlways>true</InstallAlways>
        </Component>
      </InstallerData>
    </Package>
    <Package>
      <Name>PLC AC500 Update Package</Name>
      <Description>PLC AC500 Update Package</Description>
      <FileName>PLC - AC500.abpkg</FileName>
      <FileHash>8652d588d4c1fe70e0e06a9cf3e09193</FileHash>
      <FileDownload>
      </FileDownload>
      <InstallerData>
        <Component>
          <Name>Codesys</Name>
          <ID>{F8A33E2A-5B6A-474B-8ED2-293B4982D4E6}</ID>
          <Version>2.3.9.41</Version>
        </Component>
        <Component>
          <Name>Target Support Package</Name>
          <ID>{CC764263-BEF5-4060-AA49-0366AB2E868B}</ID>
          <Version>1.0.1.0</Version>
        </Component>
        <Component>
          <Name>Control Builder Plus documentation</Name>
          <ID>{484D63DB-1EB6-4F4F-851F-7F7D7D34A396}</ID>
          <Version>1.0.1.0</Version>
        </Component>
      </InstallerData>
    </Package>    
  </Packages>
</ProductUpdate>

ABB Automation Builder 1.0\n服务版本1
ABB Automation Builder 1.0\n服务版本1
ABB Automation Builder 1.0\n服务版本1
ABB Automation Builder 1.0\n服务版本1
ABB Automation Builder 1.0\n服务版本1
ABB Automation Builder 1.0\n服务版本1
信息\ABB Automation Builder升级包V1\u 0\u 1说明\u en.htm
信息\ABB Automation Builder升级包V1\u 0\u 1说明\u en.htm
信息\ABB Automation Builder升级包V1\u 0\u 1说明\u de.htm
信息\ABB Automation Builder升级包V1\u 0\u 1说明\u fr.htm
信息\ABB Automation Builder升级包V1\u 0\u 1说明\u es.htm
信息\ABB Automation Builder升级包V1\u 0\u 1说明\u zh.htm
服务包
$1
1.0.1
$2
$3
45668677876463
$4
1.0.1
$5
1.0.0
真的
$6
1.0.0
ABB Automation Builder平台更新包
ABB Automation Builder平台更新包
ABB Automation Builder Platform.abpkg
阿贾维什瓦
ABB Automation Builder软件包经理
{F5B05B3F-9FA5-476E-BDD3-DB1397CABF4C}
1.0.1.0
真的
PLC AC500更新包
PLC AC500更新包
PLC-AC500.abpkg
8652d588d4c1fe70e0e06a9cf3e09193
Codesys
{F8A33E2A-5B6A-474B-8ED2-293B4982D4E6}
2.3.9.41
目标支持包
{CC764263-BEF5-4060-AA49-0366AB2E868B}
1.0.1.0
Control Builder Plus文档
{484D63DB-1EB6-4F4F-851F-7F7D7D34A396}
1.0.1.0
XmlPoke任务无法更新元素值,并给出消息“已进行0次替换” 我也尝试过像这样传递查询

Query=“//x:ProductUpdate/x:Packages/x:Package[x:FileName='ABB Automation Builder Platform.abpkg']/x:FileHash”或 Query=“../x:ProductUpdate/Packages/Package[FileName='ABB Automation Builder Platform.abpkg']/FileHash”

我想知道我是不是做错了? 请注意,我不想对xml文档中的名称空间进行任何更改。

你不是疯了

名称空间中原始xml文档中的(十六进制编码的)空格有问题

我没有答案

但这里有一个建议

我总是使用XmlPeek,然后“构建”查询

<XmlPeek Namespaces="&lt;Namespace Prefix='peanut' Uri='http://www150.abb.com/spaces/DAE-1/ProdDev/Shared%20Documents/40%20DAE%20Installer/Design/XML%20Descriptions/DAEInstaller_Description_StyleSheet'/&gt;"
     XmlInputPath=".\MyXmlFile.xml" 
     Query="//peanut:ProductUpdate">
    <Output TaskParameter="Result" ItemName="Peeked" />
</XmlPeek>


<Message Text="@(Peeked)"/>

(在上面的XmlPeek中,我有一个顶级查询“//ProductUpdate”。 消息@(peek)将显示那里的xml片段。 然后我可以建立查询并查看结果……并根据需要进行调整。)

无论如何,回到问题上来:

因此,如果将原始Xml更改为

<ProductUpdate xmlns="http://www150.abb.com/spaces/DAE-1/ProdDev/Shared Documents/40 DAE Installer/Design/XML Descriptions/DAEInstaller_Description_StyleSheet">
  <Strings>

但对于原始Xml,空格使用十六进制值……上述方法不起作用:(

无论如何,这太糟糕了。这几乎就像XmlPeek(或Poke)中的名称空间需要“双十六进制编码”之类的东西

对不起,我在大学里试过了。

你没疯

名称空间中原始xml文档中的(十六进制编码的)空格有问题

我没有答案

但这里有一个建议

我总是使用XmlPeek,然后“构建”查询

<XmlPeek Namespaces="&lt;Namespace Prefix='peanut' Uri='http://www150.abb.com/spaces/DAE-1/ProdDev/Shared%20Documents/40%20DAE%20Installer/Design/XML%20Descriptions/DAEInstaller_Description_StyleSheet'/&gt;"
     XmlInputPath=".\MyXmlFile.xml" 
     Query="//peanut:ProductUpdate">
    <Output TaskParameter="Result" ItemName="Peeked" />
</XmlPeek>


<Message Text="@(Peeked)"/>

(在上面的XmlPeek中,我有一个顶级查询“//ProductUpdate”。 消息@(peek)将显示那里的xml片段。 然后我可以建立查询并查看结果……并根据需要进行调整。)

无论如何,回到问题上来:

因此,如果将原始Xml更改为

<ProductUpdate xmlns="http://www150.abb.com/spaces/DAE-1/ProdDev/Shared Documents/40 DAE Installer/Design/XML Descriptions/DAEInstaller_Description_StyleSheet">
  <Strings>

但对于原始Xml,空格使用十六进制值……上述方法不起作用:(

无论如何,这太糟糕了。这几乎就像XmlPeek(或Poke)中的名称空间需要“双十六进制编码”之类的东西


抱歉,我已经尝试过了。

我认为您需要创建一个有效的名称空间元素。您拥有的是开始标记,而不是自关闭元素。 而不是:

<Namespace Prefix='x'  
     Uri='http://www150.abb.com/spaces/..../DAEInstaller_Description_StyleSheet'>

你需要:

<Namespace Prefix='x'  
     Uri='http://www150.abb.com/spaces/..../DAEInstaller_Description_StyleSheet'/>

我认为您需要创建一个有效的名称空间元素。您拥有的是开始标记,而不是自关闭元素。 而不是:

<Namespace Prefix='x'  
     Uri='http://www150.abb.com/spaces/..../DAEInstaller_Description_StyleSheet'>

你需要:

<Namespace Prefix='x'  
     Uri='http://www150.abb.com/spaces/..../DAEInstaller_Description_StyleSheet'/>