Linux

精煉撒克遜輸出

  • July 5, 2021

作為這個問題的後續,我現在有以下命令:

set +H && java -cp saxon-he-10.5.jar net.sf.saxon.Query -config:saxon.xml -s:rss.xml -qs:'//item/link!substring-after(., "_")'

撒克遜.xml

<?xml version="1.0"?>
<!--
    For documentation on the contents of a Saxon configuration file, see
    http://www.saxonica.com/html/documentation/configuration/configuration-file/index.html
-->
<configuration edition="HE" xmlns="http://saxon.sf.net/ns/configuration"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://saxon.sf.net/ns/configuration config.xsd">
 <global optimizationLevel="10"
         stripSpace="ignorable"
         recoveryPolicy="doNotRecover"
         dtdValidationRecoverable="no" />
</configuration>

如何調整它以獲得我想要的輸出?

期望的輸出

92.204.241.167
181.24.239.244
193.243.195.66

目前輸出

<?xml version="1.0" encoding="UTF-8"?>92.204.241.167 181.24.239.244 193.243.195.66

您可以在命令行上或作為查詢本身的一部分或在配置文件中指定序列化屬性。在命令行上,例如使用

!indent=yes

請記住,對於某些 shell,!需要將其轉義為\!.

在查詢中,例如使用declare option output:indent "yes";.

在配置文件中,指定<serialization indent="yes"/>

您可以在此處考慮的序列化參數包括:

  • method=text- 禁止 XML 聲明並防止轉義特殊字元,例如&.
  • omit-xml-declaration=yes- 禁止 XML 聲明,但不阻止轉義
  • item-separator=\n- 使用換行符而不是單個空格作為項目之間的分隔符。這裡的問題是如何表示換行符。使用 shell,\n是最有可能的候選者,但它可能需要用引號括起來,並且它可能因一個 shell 而異。在查詢中,或在配置文件中,它需要寫為
.

最後,作為使用 item-separator 序列化屬性的替代方法,您可以將換行符作為查詢本身的一部分引入,將其編寫為

(//item/link!substring-after(., "_")) => string-join("
")

引用自:https://unix.stackexchange.com/questions/657107