gpt4 book ai didi

java - JAVA中不使用XMLParser部分解析XML文件

转载 作者:行者123 更新时间:2023-12-01 17:35:48 28 4
gpt4 key购买 nike

所以我发现可以使用缓冲读取器/写入器将 xml 文件逐字复制到新的 xml 文件。但是,我想知道是否可以只刮掉文档的一部分?

例如,看这个例子:

<?xml version="1.0" encoding="UTF-8"?>
<BookCatalogue xmlns="http://www.publishing.org">
<w:pStyle w:val="TOAHeading" />
<Book>
<Title>Yogasana Vijnana: the Science of Yoga</Title>
<author>Dhirendra Brahmachari</Author>
<Date>1966</Date>
<ISBN>81-40-34319-4</ISBN>
<Publisher>Dhirendra Yoga Publications</Publisher>
<Cost currency="INR">11.50</Cost>
</Book>
<Book>
<Title>The First and Last Freedom</Title>
<v:imagedata r:id="rId7" o:title="" croptop="10523f" cropbottom="11721f" />
<Author>J. Krishnamurti</Author>
<Date>1954</Date>
<ISBN>0-06-064831-7</ISBN>
<Publisher>Harper &amp; Row</Publisher>
<Cost currency="USD">2.95</Cost>
</Book>
<w:pStyle w:val="TOAHeading2" />
</BookCatalogue>

抱歉,如果这不是正确的 XML 代码,我只是将我正在查看的文档中的花絮添加到我找到的示例中。但基本上,如果我想查找“标题”的实例(在本例中为第 3 行 -> TOAHeading),则从标题开始向下抓取所有内容,直到找到另一个标题实例并将其复制到另一个 xml 文件。那可能吗?此外,如果我想将其作为要存储的临时文件,并且仅在找到“图像”实例(在本例中为第 14 行)时才保留该文件,这也可能吗?我试图以最简单的方式做到这一点,所以有人对此有任何想法或经验吗?提前致谢。

public class IPDriver 
{
public static void main(String[] args) throws IOException
{
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStreamReader("C:/Documents and Settings/user/workspace/Intern Project/Proposals/Converted Proposals/Extracted Items/ProposalOne/word/document.xml"), "UTF-8"));
BufferedWriter writer = new BufferedWriter(new OutputStreamReader(new FileOutputStreamReader("C:/Documents and Settings/user/workspace/Intern Project/Proposals/Converted Proposals/Extracted Items/ProposalOne/word/tempdocument.xml"), "UTF-8"));

String line = null;

while ((line = reader.readLine()) != null)
{
writer.write(line);
}

// Close to unlock.
reader.close();
// Close to unlock and flush to disk.
writer.close();
}
}

来 self 的实际 XML 文档的示例

- <w:smartTag w:uri="urn:schemas-microsoft-com:office:smarttags" w:element="address">
- <w:smartTag w:uri="urn:schemas-microsoft-com:office:smarttags" w:element="Street">
- <w:r w:rsidRPr="00822244">
<w:t>6841 Benjamin Franklin Drive</w:t>
</w:r>
</w:smartTag>
</w:smartTag>
</w:p>
- <w:p w:rsidR="00B41602" w:rsidRPr="00822244" w:rsidRDefault="00B41602" w:rsidP="007C3A42">
- <w:pPr>
<w:pStyle w:val="Address" />
</w:pPr>
- <w:smartTag w:uri="urn:schemas-microsoft-com:office:smarttags" w:element="City">
- <w:smartTag w:uri="urn:schemas-microsoft-com:office:smarttags" w:element="place">

只是 .docx 中的基本 document.xml 文件

最佳答案

您可能想阅读有关 java XML 解析器的内容。有两种类型:SAX 解析器和 DOM 解析器。

SAX 解析器是“基于事件”的,这意味着解析器将为您扫描 xml 文件并调用您定义的一组“回调”方法,例如 startElement() 和 endElement()。 SAX 解析器对于非常大的 xml 文件非常有效。

DOM 解析器会将整个 XML 读入内存,然后您可以通过调用 getElementsByTagName("w:pStyle") 等方法来查询“DOM 对象”。 Dom 解析器往往更容易使用,但比 SAX 解析器使用更多内存。

会有一点学习曲线,但这些是在 java 中处理 XML 的标准方法。还有一些旨在简化标准库的库,例如 JDom。

关于java - JAVA中不使用XMLParser部分解析XML文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6524863/

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