2014-01-22 71 views
2

我正在使用augeas在某些機器上操作XML。雖然創建新節點並設置一組屬性像魅力一樣工作,但我咬着指甲給XML文件添加一個簡單的屬性。 XML如下所示:通過augeas向XML根節點添加屬性的問題

<?xml version="1.0"?> 
<Context> 
    <WatchedResource></WatchedResource> 
</Context> 

我不只是想通過

set /files/path/to/my/file.xml/Context/#attribute/allowLinking "true" 

添加allowLinking="true"到上下文根節點這是不幸總是

/error = "put_failed" 
/error/path = "/files/path/to/my/file.xml/Context" 
/error/lens = "/usr/share/augeas/lenses/dist/xml.aug:134.10-.73:" 
/error/message = "Failed to match \n { /#attribute/ }?({ /#text/ … 

我失敗使用木偶開源3.4.2與augeas 1.0.0。

任何建議我做錯了什麼?

回答

3

訂單在Augeas樹中很重要。在這種情況下,需要在#text節點和子節點之前設置XML節點屬性。

所以,你需要的是:

ins #attribute before /files/test.xml/Context/#text 
set /files/test.xml/Context/#attribute/allowLinking true 

注意,這個變化是不是冪,因爲insert不是冪等操作。

在Puppet上,你可以使用onlyif來使這個冪等。

+0

謝謝!奇蹟般有效。現在我只需要處理沒有#text節點或已存在的#attribute的情況。 ;-) –

+0

確實。對於複雜情況,您可能想使用AugeasProviders編寫類型和基於Augeas的提供程序(請參閱augeasproviders.com)。 –