【问题标题】:XSLT find and get a file by its nameXSLT 按名称查找并获取文件
【发布时间】:2019-03-06 08:18:04
【问题描述】:

尊敬的 Stackoverflow 社区

我搜索了很长时间,但我找不到任何关于这个主题的东西,也许你们这里的某个人可以帮助我。

我搜索一个 XSLTransform 查询,它允许我通过文件名查找和获取文件。

我尝试搜索并将更多信息放入文本文件中,例如路径:C:/ErrorLogs/2019-03/Day1.txt

提前谢谢你。

最好的问候 PassCody

顺便说一句。我用 XSLT-2.0 编写

----编辑----

我现在写了源代码,它可以动态工作,但是如果有新的输入,错误消息将出现在第一个 xD 后面 也许你们中的某个人可以帮助我解决这个问题。

例如:ErrorMessage1ErrorMassage2

我的目标:ErrorMessage1 [TAB] ErrorMessage2

【问题讨论】:

    标签: xml xslt xslt-1.0 xslt-2.0


    【解决方案1】:

    如果您知道 XML 文件的名称,则可以将文件名转换为 URI 并将其提供给 doc()document() 函数。

    如果您不知道文件的名称,“查找”文件就有点难度了;这取决于您从什么信息开始。 collection() 函数在 XSLT 2.0 中可用;规范用非常抽象的术语对其进行了描述,但是许多实现在这里提供了一些搜索功能:例如,参见

    https://www.saxonica.com/html/documentation/sourcedocs/collections.html

    【讨论】:

    • 嗨迈克尔,我会试试这个。感谢您的快速回答和帮助。
    【解决方案2】:

    您好,PassCody,

    首先欢迎来到 StackOverflow:D!

    我有几个问题要问你:

    • 您想对该文件做什么?是否要重新定位/重命名 它,或者你想对内容执行某些操作 文件?
    • 文件位于哪种映射结构中?你能举个例子吗?同一个文件夹中是否有多个文件?

    此信息是为您提供正确答案所必需的。您提供的越多,答案对您的具体情况就越有帮助。

    例如,如果您想获取当前位置的 xml 文件的名称。您可以包括:

    <URL:http://www.w3.org/TR/xpath-functions/#func-document-uri>
    <xsl:value-of select="document-uri(/)"/>
    

    这将为您提供文件的完整 URI(位置),以获取您需要选择最后一个“/”之后的字符串的文件名。您可以使用子字符串函数来指定要使用的字符串部分。

    如果您可以将文件的路径包含在变量 (see this question) 中,则可以遍历当前目录中的文件以创建具有相同内容的新文件,您可以将其写入新位置或执行所有操作其他种类的东西。

    可以说,您可以使用 xslt 做很多有趣的事情,但人们需要更多信息才能了解您的具体情况 :)。 在this website 上可以找到很多有用的 XSLT 函数。我敢肯定,如果你在这个网站上玩了一会儿,你也能找到你要找的东西。

    我希望这会有所帮助!祝你有美好的一天。

    杰斯帕

    编辑:我已将部分答案更改为不包含错误信息。

    编辑: 回答 cmets 中的问题: 您可以在代码循环中的 xslt 中添加“新行”部分。添加&lt;xsl:text&gt;&amp;#10;&lt;/xsl:text&gt;&lt;xsl:text&gt;&amp;#xa;&lt;/xsl:text&gt;。两者中的任何一个都可以。

    而不是:
    ErrorMessage1ErrorMessage2,

    您将获得:
    ErrorMessage1 ErrorMessage2

    【讨论】:

    • xsl:for-each select="*.xml" 如何“循环文件”?选择表达式 *.xml 只会给出 XPath 语法错误。
    • *.xml 单独产生的语法错误不会因为前缀pathToYourFiles/ 而消失。我不确定您认为可以以何种方式将 URI 或文件模式放入 xsl:for-eachselect 属性中,但在 XSLT/XPath 中不会以这种方式加载或搜索文件。您是否想到了 Michael Kay 在回答中提到的 collection 功能?在那里,取决于 XSLT 处理器(Altova?),像 select="collection('pathToYourFiles/*.xml')" 这样的语法可能会起作用。
    • 你好 Jesper 和 Martin,A1:我尝试搜索并将更多信息放入文本文件中,例如路径:C:/ErrorLogs/2019-03/Day1.txt 我现在写了源代码并且它是动态的,但是如果有新的输入,错误消息将出现在第一个 xD 后面,也许你们中的一些人可以帮助我解决这个问题。
    • 例如:ErrorMessage1ErrorMassage2 我的目标:ErrorMessage1 [TAB] ErrorMessage2
    • *感谢您提供我的评论/编辑问题。它现在可以正常使用 感谢您的帮助 ;-)
    猜你喜欢
    • 1970-01-01
    • 2020-08-12
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    相关资源
    最近更新 更多