getSystemId()的返回值

问题描述 投票:0回答:1

我有Java代码

    String xml = "/Users/test/xml/test.xml";
   // long startTime = System.nanoTime();

    Source xmlFile = new StreamSource(new File(xml));
    System.out.println(xmlFile.getSystemId() + " is valid");

XML文件是

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY >
<!ENTITY test SYSTEM "file:///Users/test/list" >]>
<cds>
   <user>&test;</user>

当我按照我的理解执行代码时,getSystemId应该打印“ file:/// Users / test / list”,但是它打印“ /Users/test/xml/test.xml”。我的代码中是否有任何错误,或者有什么方法可以提取systemID?

java xml-parsing
1个回答
0
投票

您的推理与您的代码在做些事情。代码正在执行应做的工作。

根据文档StreamSource#getSystemId()方法返回:

使用setSystemId设置的系统标识符,如果未调用setSystemId,则为null。

您获得的输出是正确的,因为当您向new File(xml)构造函数提供StreamSource时,根据StreamSource类定义,它接受如下:

/**
 * Construct a StreamSource from a File.
 *
 * @param f Must a non-null File reference.
 */
public StreamSource(File f) {
    //convert file to appropriate URI, f.toURI().toASCIIString()
    //converts the URI to string as per rule specified in
    //RFC 2396,
    setSystemId(f.toURI().toASCIIString());
}

因此,这就是为什么您获得提供的实际文件名/Users/test/xml/test.xml,而不是您的推理意图的原因。

我猜您可能希望它会奇迹般地从xml行中的<!ENTITY test SYSTEM "file:///Users/test/list" >]>文件中提取它。这是错误的!

尝试搜索一些xml解析库,或者自己解析文件内容。

仅供参考:-您总是可以查看在IDE中使用的类的代码。

ref:https://docs.oracle.com/javase/7/docs/api/javax/xml/transform/stream/StreamSource.html#getSystemId()

© www.soinside.com 2019 - 2024. All rights reserved.