gpt4 book ai didi

Java - 清除XML标签并获取属性

转载 作者:行者123 更新时间:2023-12-02 02:50:24 28 4
gpt4 key购买 nike

我有下一个要分析的 XML 文件:

<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE colHAREM>
<colHAREM versao="Segundo_dourada_com_relacoes_14Abril2010">
<DOC DOCID="H2-dftre765">
<P>A Reforma Religiosa e Política
na
<EM ID="H2-dftre765-28" CATEG="LOCAL" TIPO="HUMANO" SUBTIPO="PAIS" COREL="H2-dftre765-37" TIPOREL="incluido">Inglaterra</EM>
</P>
<P>
<EM ID="H2-dftre765-29" CATEG="PESSOA" TIPO="INDIVIDUAL" COREL="H2-dftre765-28" TIPOREL="natural_de">Henrique VIII</EM>
O curso da
<EM ID="H2-dftre765-30" CATEG="ACONTECIMENTO|OBRA" TIPO="EFEMERIDE|PLANO" COREL="H2-dftre765-26" TIPOREL="ident">Reforma</EM>
foi diferente na
<EM ID="H2-dftre765-31" CATEG="LOCAL" TIPO="HUMANO" SUBTIPO="PAIS" COREL="H2-dftre765-31" TIPOREL="ident">Inglaterra</EM>
. Tinha havido desde há muito uma forte corrente anti-clerical, tendo a
<EM ID="H2-dftre765-32" CATEG="PESSOA|LOCAL" TIPO="POVO|HUMANO" SUBTIPO="|PAIS" COREL="H2-dftre765-28 H2-dftre765-28" TIPOREL="LOCAL**ident**H2-dftre765-28**LOCAL PESSOA**natural_de**H2-dftre765-28**LOCAL">Inglaterra</EM>
já tido o movimento
<EM ID="H2-dftre765-33" CATEG="ABSTRACCAO" TIPO="DISCIPLINA" COREL="H2-dftre765-28" TIPOREL="praticado_em">Lollard</EM>
, que inspirou os
<EM ID="H2-dftre765-34" CATEG="PESSOA" TIPO="GRUPOMEMBRO">Hussitas</EM>
na
<EM ID="H2-dftre765-35" CATEG="LOCAL" TIPO="HUMANO" SUBTIPO="REGIAO" COREL="H2-dftre765-34 H2-dftre765-31" TIPOREL="pratica_se incluido">Boémia</EM>
. Mas
<EM ID="H2-dftre765-39" CATEG="TEMPO" TIPO="TEMPO_CALEND" SUBTIPO="DATA" COREL="H2-dftre765-72" TIPOREL="incluido">em cerca de 1520</EM>
, no entanto, os
<EM ID="H2-dftre765-40" CATEG="PESSOA" TIPO="GRUPOMEMBRO" COREL="H2-dftre765-33" TIPOREL="praticante_de">Lollards</EM>
não eram já uma força activa, ou pelo menos um movimento de massas.
</P>
</DOC>
</colHAREM>

目标是研究ATTRIBUTE 并提取“CATEG”和“TIPO”,然后提取属性

我得到了以下代码:

import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.*;
import org.xml.sax.SAXException;

public class xml {

public static void main(String[] args) throws Exception {

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
Document doc = null;
NodeList nodes = null;
//Set<String> ids = null;
try {
doc = factory.newDocumentBuilder().parse(new File("teste.xml"));

XPathExpression expr = XPathFactory.newInstance().newXPath().compile("//@TIPO");
//ids = new HashSet<String>();
nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (XPathExpressionException e) {
e.printStackTrace();
}

for (int i = 0; i < nodes.getLength(); i++) {
//System.out.println("."); //progress indicator
Element el = ((Attr) nodes.item(i)).getOwnerElement();
if ( el.hasAttribute("CATEG") || el.hasAttribute("TIPO"))
{
System.out.println(el.getAttribute("CATEG")+ " - "+el.getAttribute("TIPO"));//el.removeAttribute("siteKey");
//System.out.println(el.getLocalName().trim());
}

}
}
}

输出为:

LOCAL - HUMANO
PESSOA - INDIVIDUAL
ACONTECIMENTO|OBRA - EFEMERIDE|PLANO
LOCAL - HUMANO
PESSOA|LOCAL - POVO|HUMANO
ABSTRACCAO - DISCIPLINA
PESSOA - GRUPOMEMBRO
LOCAL - HUMANO
TEMPO - TEMPO_CALEND
PESSOA - GRUPOMEMBRO

我想要这样的东西:

LOCAL - HUMANO - Inglaterra
PESSOA - INDIVIDUAL - Henrique_VIII
......
TEMPO - TEMPO_CALEND - em_cerca_de_1520
PESSOA - GRUPOMEMBRO - Lollards

我不知道如何获取属性,请注意,我需要将属性与 _ 连接起来例如:em cerca de 1520 应该是 em_cerca_de_1520,这就是这里 标签内的属性。

提前谢谢您。

最佳答案

这里提出了类似的问题:How can i get element text in node in Java?

请将您的打印语句更改为以下内容:

System.out.println(el.getAttribute("CATEG")+ " - "+el.getAttribute("TIPO") + " - " + el.getFirstChild().getNodeValue());

我认为您对 xml 中元素和属性之间的区别有轻微的误解,双引号内的值是属性值,但是您尝试添加的值是元素的文本值(而不是属性)。

关于Java - 清除XML标签并获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43943312/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com