我有这个XML:
<note>
<text style="italic">Lorem ipsum dolor sit amet</text>
<text style="italic">consectetur adipisicing elit, </text>
<text>sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</text>
<text style="bold">Ut enim ad minim veniam, quis nostrud exercitation</text>
<text>ullamco</text>
</note>
这是我的问题:
我想遍历xml并将属性与之前的属性进行比较,看看它们是否相同。如果他们是一样的我想什么都不做。如果它们不相同,我想将属性的值(斜体,粗体等)保存到ArrayList。
这是我的代码:
List<String> styles = new ArrayList<String>();
List<Node> textNodesXML = new ArrayList<Node>();
textNodesXML = xpath.getNodes("/note/text");
for (Node n : textNodesXML)
{
Node attribute = n.getAttributes().getNamedItem("style");
Node nextSibling = getTheNextSibling(n);
Node siblingAttribute= nextSibling .getAttributes().getNamedItem("style");
//Code is working up until here.
if (attribut != null && siblingAttribute.getNodeValue() != attribute.getNodeName())
{
styles.add(attribute.getTextContent());
}
}
public static Element getTheNextSibling(Node node)
{
Node sibling = node.getNextSibling();
while (sibling != null)
{
if (sibling.getNodeType() == Node.ELEMENT_NODE)
{
return (Element) sibling;
}
sibling = sibling.getNextSibling();
}
return null;
}
我想让它落在我的ArrayList样式中:
italic
bold
非常感谢
答案 0 :(得分:0)
只需将当前样式值与列表中的最后一个样式值进行比较:
而不是
styles.add(attribute.getTextContent());
DO
if (styles.isEmpty() || !styles.get(styles.size() - 1).equals(attribute.getTextContent())) {
styles.add(attribute.getTextContent());
}