Domanda

Mi chiedo se questo è possibile.

Ho html in questo modo:

<p>
  <font face="Georgia">
    <b>History</b><br>&nbsp; <br>Two of the polysaccharides used in the manufacture of...</font>
    <a title="PubMed" href="http://www.www.gov/pubmed/" target="_blank">
    <font face="Georgia">) and this web site for new development by...well as Self Affirmed Medical Food GRAS status.&nbsp; 
    </font>
</p>

<p>
  <font face="Georgia">[READMORE]</font>
</p>

<p><font face="Georgia"><br><strong>Proprietary Composition</strong><br>
   <br>The method in which soluble fibres are made into... REST OF ARTICLE...
</p>

Sì, è brutto html e proviene da un WYSIWYG quindi ho poco controllo su di esso.

Quello che voglio fare è ricerca di [READMORE] nel documento, rimuovere tutti i tag principale (in questo caso, l'<font> ei tag <p>) e sostituirli con un collegamento readmore mentre wrapping il resto del documento in un gigantesco `... resto dell'articolo ...

Sono abbastanza sicuro che il HtmlAgilityPack sarà farmi parte del tragitto, ma sto solo cercando di capire da dove cominciare.

Finora, sono abbastanza sicuro che devo usare htmlDoc.DocumentNode.SelectSingleNode(//p[text()="[READMORE]"]) o qualcosa del genere. Io non sono troppo familiarità con XPath.

Per i miei documenti, il readmore può o non può essere in un tag font nidificato.

Inoltre, in alcuni casi, può non essere in un tag a tutti, ma piuttosto alla radice del documento. Posso solo fare una ricerca regolare e sostituire in quel caso e dovrebbe essere semplice.

La mia situazione ideale sarebbe qualcosa come questo (pseudocodice)

var node = SelectNodeContaining("[READMORE]").

node.Replace( "link here" );

node.RestOfDocument().Wrap("<div class='wrapper'");

Lo so, sto sognando ... ma spero che questo ha un senso.

È stato utile?

Soluzione

Ecco una soluzione XSLT :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="p[descendant::text()[. = '[READMORE]']]">
  <a href="#ReadmoreWrapper">READMORE</a>
  <div class="wrapper" id="#ReadmoreWrapper">
   <xsl:apply-templates select="following-sibling::node()" mode="copy"/>
  </div>
 </xsl:template>

 <xsl:template match=
  "node()[ancestor::p[descendant::text()[. = '[READMORE]']]
         or
          preceding::p[descendant::text()[. = '[READMORE]']]
          ]
  "/>

  <xsl:template match="node()|@*" mode="copy">
      <xsl:copy>
       <xsl:apply-templates select="node()|@*" mode="copy"/>
      </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

quando viene applicata questa trasformazione sul seguente documento XML :

<html>
<p>
  <font face="Georgia">
    <b>History</b><br/>&#xA0; <br/>Two of the polysaccharides used in the manufacture of...</font>
    <a title="PubMed" href="http://www.www.gov/pubmed/" target="_blank"/>
    <font face="Georgia">) and this web site for new development by...well as Self Affirmed Medical Food GRAS status.&#xA0;
    </font>
</p>

<p>
  <font face="Georgia">[READMORE]</font>
</p>

<p><font face="Georgia"><br/><strong>Proprietary Composition</strong><br/>
   <br/>The method in which soluble fibres are made into... REST OF ARTICLE...
   </font>
</p>

</html>

il risultato voluto è prodotto :

<html>
    <p>
        <font face="Georgia"><b>History</b><br/>  <br/>Two of the polysaccharides used in the manufacture of...</font>
        <a title="PubMed" href="http://www.www.gov/pubmed/" target="_blank"/>
        <font face="Georgia">) and this web site for new development by...well as Self Affirmed Medical Food GRAS status. 
    </font>
    </p>
    <a href="#ReadmoreWrapper">READMORE</a>
    <div class="wrapper" id="#ReadmoreWrapper">
        <p>
            <font face="Georgia"><br/><strong>Proprietary Composition</strong><br/><br/>The method in which soluble fibres are made into... REST OF ARTICLE...
   </font>
        </p>
    </div>
</html>

Altri suggerimenti

Se ho ragione, allora, si può provare una cosa ... come la stessa cosa che facciamo nella invio di mail html personalizzato

  1. Creare un modello della vostra pagina html con contenuti statici.
  2. identificatori Append per contenuti dinamici come lei ha detto [Readmore] o {} readmore o qualcosa di simile a questo.
  3. Ora leggere il file riga per riga modello HTML e sostituire gli identificatori con il testo desiderato.
  4. Ora salvate l'intera stringa in un nuovo file HTML o fare quello che vuoi.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top