Как я могу найти элемент классом CSS с XPath?

Вы должны использовать StreamingOutput вместо использования File.

String homePath = System.getProperty("user.home");
    String filePath = homePath + "/Downloads/Resume" + LocalDateTime.now().toLocalDate() + ".pdf";

    org.xhtmlrenderer.pdf.ITextRenderer renderer = new ITextRenderer();

    String yourXhtmlContentAsString = "<h1>hi </h1>";
    renderer.setDocumentFromString(yourXhtmlContentAsString);
    renderer.layout();

    java.io.FileOutputStream fos = new java.io.FileOutputStream(filePath);
    renderer.createPDF(fos);
    //fos.close();
    final File file = new File(filePath);

    StreamingOutput fileStream =  new StreamingOutput()
    {
        @Override
        public void write(java.io.OutputStream output) throws IOException, WebApplicationException
        {
            try
            {

                byte[] data = Files.readAllBytes(file.toPath());
                output.write(data);
                output.flush();
            }
            catch (Exception e)
            {
                throw new WebApplicationException("File Not Found. !!");
            }
        }
    };

   return Response
       .ok( fileStream, MediaType.APPLICATION_OCTET_STREAM)
       .header("Content-Disposition", "attachment; filename=\"Resume" + LocalDateTime.now().toLocalDate() + ".pdf\"")
       .build();
267
задан John Slegers 1 May 2018 в 00:40
поделиться

2 ответа

Этот селектор должен работать, но будет более эффективным, если вы замените его подходящей разметкой:

//*[contains(@class, 'Test')]

Или, поскольку мы знаем, что искомым элементом является div :

//div[contains(@class, 'Test')]

Но поскольку это также будет соответствовать случаям вроде class = "Testvalue" или class = "newTest" , версия @ Tomalak, представленная в комментариях, лучше :

//div[contains(concat(' ', @class, ' '), ' Test ')]

Если вы действительно хотите быть уверены в правильности совпадения, вы также можете использовать функцию normalize-space для удаления случайных пробелов вокруг имени класса (как указано @Terry):

//div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]

Обратите внимание, что во всех В этих версиях * лучше всего заменить на любое имя элемента, которое вы действительно хотите сопоставить, если только вы не хотите искать каждый элемент в документе для данного условия.

429
ответ дан 23 November 2019 в 02:22
поделиться

Соответствие против одно класс, который имеет пробел.

<div class="hello "></div>
//div[normalize-space(@class)="hello"]
0
ответ дан 23 November 2019 в 02:22
поделиться