用java解析css文件

用java解析css文件,java,css,parsing,line-numbers,Java,Css,Parsing,Line Numbers,首先我想解释我在做什么,然后我的问题。 我需要扫描一个css文件并获取它的所有内部链接(主要是图像),但我需要获取找到链接的行号 现在我正在使用长笛库解析文件,它工作得很好,我也在使用LineNumberReader来获取找到链接的行号,但是这个类抛出了一个不正确的行号 例如:链接.././image/bg.gif位于行号350中,但LineNumberReader类中的方法getLineNumber表示490 因此,如果你们中的一些人能以正确的方式驾驶我,并给我一个可能的解释,为什么LineN

首先我想解释我在做什么,然后我的问题。 我需要扫描一个css文件并获取它的所有内部链接(主要是图像),但我需要获取找到链接的行号

现在我正在使用长笛库解析文件,它工作得很好,我也在使用LineNumberReader来获取找到链接的行号,但是这个类抛出了一个不正确的行号

例如:链接.././image/bg.gif位于行号350中,但LineNumberReader类中的方法getLineNumber表示490

因此,如果你们中的一些人能以正确的方式驾驶我,并给我一个可能的解释,为什么LineNumberReader类会这样做,我将不胜感激

pd:另一个解决方案将非常感谢

  • 对不起,可能的拼写错误,英语不是我的母语

另一种解决方案-- 看看这些解析器生成工具

  • Antlr-
  • JavaCC-
  • JavaCC和Antlr提供了一种获取行号和列号的方法

    您的问题的可能原因。。。一号线。。。可能是因为解析器生成工具的工作方式。。。他们试图找出最好的匹配。。。为此,有时他们必须回溯/回放流。。。。因此,您的LineNumberReader实例将不同步


    获取行号或列号的理想方法是使用工具本身提供的方法。

    另一种解决方案-- 看看这些解析器生成工具

  • Antlr-
  • JavaCC-
  • JavaCC和Antlr提供了一种获取行号和列号的方法

    您的问题的可能原因。。。一号线。。。可能是因为解析器生成工具的工作方式。。。他们试图找出最好的匹配。。。为此,有时他们必须回溯/回放流。。。。因此,您的LineNumberReader实例将不同步


    获取行号或列号的理想方法是使用工具本身提供的方法。

    Hi@eakbas和@Favonius谢谢您的回答。
    我终于找到了一个解决办法,也许这不是最好的,但至少对我有效。
    如前所述,为了分析css文件,我使用了长笛库来实现org.w3c.sac包的DocumentHandler类。
    因此我实现了“property”方法,该方法有3个参数,即属性名称、一个LexicalUnit对象和一个布尔值,指示该属性是否具有重要语句

    public void property(String property, LexicalUnit lexicalUnit, boolean important)
    
    由于我需要找到特定属性的行号,所以我进行了搜索,可以看到flute用于实现LexicalUnit接口的类包含行号(它是LexicalUnit),因此我使用反射从LexicalUnit接口转换为一个LexicalUnit对象

    Class<?> clazz = ClassUtils.getClass("org.w3c.flute.parser.LexicalUnitImpl");
    Object lexicalObject = clazz.cast(lexicalUnit);
    Integer line = (Integer)MethodUtils.invokeMethod(lexicalObject, "getLineNumber", null, null);
    

    注意:类ClassUtils和MethodUtils是commons beanutils apache库的一部分。

    Hi@eakbas和@Favonius感谢您的回答。
    我终于找到了一个解决办法,也许这不是最好的,但至少对我有效。
    如前所述,为了分析css文件,我使用了长笛库来实现org.w3c.sac包的DocumentHandler类。
    因此我实现了“property”方法,该方法有3个参数,即属性名称、一个LexicalUnit对象和一个布尔值,指示该属性是否具有重要语句

    public void property(String property, LexicalUnit lexicalUnit, boolean important)
    
    由于我需要找到特定属性的行号,所以我进行了搜索,可以看到flute用于实现LexicalUnit接口的类包含行号(它是LexicalUnit),因此我使用反射从LexicalUnit接口转换为一个LexicalUnit对象

    Class<?> clazz = ClassUtils.getClass("org.w3c.flute.parser.LexicalUnitImpl");
    Object lexicalObject = clazz.cast(lexicalUnit);
    Integer line = (Integer)MethodUtils.invokeMethod(lexicalObject, "getLineNumber", null, null);
    

    注意:类ClassUtils和MethodUtils是commons beanutils apache库的一部分。

    或者您可以使用ph css作为解析库。
    有关如何提取URL和确定正确的源位置的示例,请参见的“访问CSS中包含的所有URL”示例。

    或者,您可以使用ph CSS作为解析库。
    有关如何提取URL和确定正确的源位置的示例,请参见的示例“访问CSS中包含的所有URL”。

    您需要更具体一些。你能用一个简单(短)的输入css文件重现你的问题吗?如果是这样,您可以在这里发布代码和输入。然后,很多人会帮助你。你需要更具体一些。你能用一个简单(短)的输入css文件重现你的问题吗?如果是这样,您可以在这里发布代码和输入。然后,许多人将能够提供帮助。