幕后的XML解析器为节点元素之间的所有空白创建#text节点.无论是否有换行符或缩进,它都会创建一个带有换行符的#text节点,并在节点的数据部分中跟随缩进空格.因此,在解析“ref”元素的子节点时提供的xml示例中,它返回5个节点
>节点1:带有换行符和缩进空格的#text
>节点2:“请求者”节点,其在数据部分中具有带有“John Doe”的#text子节点
>节点3:带有换行符和缩进空格的#text
>节点4:“项目”节点,其又在数据部分中具有带有“X”的#text子节点
>节点5:带有换行符和缩进空格的#text
此函数为您删除所有这些无用的#text节点.请注意,如果你有意拥有一个只由空格组成的xml元素,那么这个函数将删除它,但对于99.99%的xml情况,这应该可以正常工作.
function removeIndentNodes( childNodes )
numNodes = childNodes.getLength;
remList = [];
for i = numNodes:-1:1
theChild = childNodes.item(i-1);
if (theChild.hasChildNodes)
removeIndentNodes(theChild.getChildNodes);
else
if ( theChild.getNodeType == theChild.TEXT_NODE && ...
~isempty(char(theChild.getData())) && ...
all(isspace(char(theChild.getData()))))
remList(end+1) = i-1; % java indexing
end
end
end
for i = 1:length(remList)
childNodes.removeChild(childNodes.item(remList(i)));
end
end
像这样称呼它
tree = xmlread( xmlfile );
removeIndentNodes( tree.getChildNodes );