java - 在 JAVA 中从 XML 文件打印子元素时答案无效

标签 java xml

我正在尝试使用 JAVA 从 XML 文件中获取父元素的子元素数量。这是我正在使用的代码:

File fXmlFile = new File("SearchPromotions.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);

NodeList l = doc.getElementsByTagName("TestCase");
Node parentNode = l.item(0);
int count = parentNode.getChildNodes().getLength();

System.out.println(count);

这是 XML 文件:

<TestCase>
    <SelectedDataTableNames name="SearchData"> </SelectedDataTableNames>

    <Open page="hsbc"  ms="5000"  />
    <Click object="hsbc.Personal_Link"  />
    <Click object="hsbc.CreditCard_tab"  />
    <Call businessComponent="Global.Verify_Search">
       <Param name="HotelName_Param" value="@SearchData_link" />
    </Call>
    <CheckElementPresent object="hsbc.Img_Hotel_logo"  Identifire="Hotel_Name_PARAM:@SearchData_ResultHotelName"  fail="true"  customErrorMessage="Searched hotel name is not present in the page."  />
</TestCase>

我面临的问题是它打印了错误的值。打印的值是 13。但是正如您所看到的,父元素“TestCase”只有 6 个子元素。我哪里做错了。请帮忙

最佳答案

public static void main(String[] args) throws Exception {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        String fileContent = readFile("SearchPromotions.xml");// Read trimmed file
        InputStream in = new ByteArrayInputStream(fileContent.getBytes("UTF-8"));// Create stream to pass it to parser()
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(in);

        NodeList l = doc.getElementsByTagName("TestCase");
        Node parentNode = l.item(0);
        int count = parentNode.getChildNodes().getLength();

        System.out.println(count);
    }

    private static String readFile(String pathname) throws IOException {
        File file = new File(pathname);
        StringBuilder fileContents = new StringBuilder((int) file.length());
        Scanner scanner = new Scanner(file);
        try {
            while (scanner.hasNextLine()) {
                fileContents.append(scanner.nextLine().trim()); // Trim the whitespace. This resuls in TEXT_NODE.
            }
            return fileContents.toString();
        } finally {
            scanner.close();
        }
    }

XML 中存在一些空白字符,这将导致额外的节点。尝试上述解决方案希望有帮助。

关于java - 在 JAVA 中从 XML 文件打印子元素时答案无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25991953/

相关文章:

java - Streaming 的多项操作能否打破 Demeter 法则?

java - 如何从 Java 中的 Cloud Function 触发 Cloud Dataflow 管道作业?

java - 正则表达式数字范围

java - Spring Bean 初始化顺序

java - 在 JSF 2 中执行操作后导航到同一页面

java - 使用 web.xml 在 Tomcat 8 上设置自定义过滤器

java - 使用 xPath 修改 XML 文件

xml - 使用 VBscript 从节点和子节点的 XML 中提取数据

mysql - 使用 mysql ExtractValue() 从 xml 中选择数据

java - 删除 XML 输入文件 Java