我試圖使用d3.js將一組生成的XML數據可視化,雖然我確信這將是明顯的東西,但我遇到了一個問題,最初認爲會很簡單 - 使用從XML節點獲取的屬性顯示節點名稱,而不是實際的XML節點名稱。在d3.js中使用XML屬性
例如,與該XML:
<data>
<foo id="123" name="fooname1" type="footype1">
<bar>Hello</bar>
</foo>
<foo id="456" name="fooname2" type="footype2">
<bar>World</bar>
</foo>
</data>
我試圖展示「富」節點與文本「fooname1」和「fooname2」圈(其他屬性將在以後使用)而不是他們都顯示「富」。我一直在嘗試的是類似這樣的東西(減半徑,鼠標懸停和文本錨點):
var node = svg.selectAll(".node")
.data(nodes)
.enter().append("g")
.attr("class","node")
node.append("circle")
node.append("text")
.text(function(d) {return d.lastElementChild ? d.attributes.nodeValue:d.localName+": "+d.textContent ; })
;
想法是,如果它不是列表中的最後一個節點,則使用來自屬性的名稱,如果不是,則顯示節點內容,但d.attributes.nodeValue永遠不會返回任何內容和d.attributes [1] .nodeValue是我的第二個想法,返回「d.attributes [1]未定義」。
從的console.log(節點)的輸出控制檯顯示屬性加載到對象元件,並且這樣坐在結構:
[object element]
attributes: [object MozNamedAttrMap]
0 [object Attr]
nodeName = id
nodeValue=123
1 [object Attr]
nodeName = name
nodeValue = fooname1
2 [object Attr]
nodeName = type
nodeValue = footype1
localName = foo
textContent= ""
所以數據是存在的,我只是不正確地選擇它。我想我可能會試圖以錯誤的方式拉它,但使用d3.selectAll(d.attributes)的一些變化似乎也沒有返回任何東西 - 我是否只是以錯誤的方式去做這件事?
編輯: 節點被創建如下:
d3.xml(URL,"application/xml",function(xml) {
var nodes = self.nodes = d3.select(xml).selectAll("*")[0]
});
其中URL是到其生成XML web服務所生成的路徑。對於鏈接也有類似的處理,然後將這些處理引入到強制指導佈局 - 這很大程度上取決於基於力的XML的一些示例。
你如何創建'節點'? –