開放源代碼項目使用CMake來構建其項目文件。使用XSLT替換XML文件中的字符串
我不同意CMake - 這是一個10MB的安裝程序,可爲幾百KB的源創建批處理文件,甚至可以將開發者路徑硬編碼到輸出。它根本不會執行相對路徑,也不會使用Visual Studio提供的方便的宏。
所以我決定環顧四周。 Gyp看起來很有希望,但它又依賴於安裝了Python的用戶,這又回到了我不喜歡CMake的原因。至少它不會硬編碼路徑。
所以我想過使用批處理文件,以及簡單的查找和替換,但由於項目文件是xml爲什麼不是XSLT?所以在SO上搜索ran across this page,這似乎表明我想要在一個非常簡單的層面上做什麼。
所以我編輯的答案被Dimitre Novatchev以下幾點:
<xsl:template match="OutDir/text()">
<xsl:text>Diferent text</xsl:text>
</xsl:template>
希望會發現下面並改變它:
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">U:\unittest-cpp-pj\vs_projects\vs2012_x86\Debug\</OutDir>
但是沒有工作 - 使用VS2010 xslt調試器甚至不會在線上中斷。我不想花幾個月的時間學習如何正確使用XSLT,因爲這看起來很簡單。我需要的是我可以在28個xml文件中觸發並用它來完成的事情。
一旦我有這個工作,我會擴大它,以正確的值替換字段。
更新:這是整個XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="OutDir/text()">
<xsl:text>Diferent text</xsl:text>
</xsl:template>
</xsl:stylesheet>
您可以請張貼更多您的輸入XML和所需的輸出XML嗎?我們需要更多的背景。 –
這可能是由於命名空間。在XML的根元素上是否有像'xmlns =「http://schemas.microsoft.com/developer/msbuild/2003」'這樣的語句? –
如果這是您使用的唯一模板,則它不起作用。因此,如果您可以顯示所有的XSLT代碼,這將是非常有益的 - 然後我們很樂意提供幫助。 –